当系统剪贴板中的文本变化时,处理文本并将结果保存到剪贴板。

1.[代码][Java]代码

import java.awt.Toolkit;

import java.awt.datatransfer.Clipboard;

import java.awt.datatransfer.ClipboardOwner;

import java.awt.datatransfer.DataFlavor;

import java.awt.datatransfer.StringSelection;

import java.awt.datatransfer.Transferable;

import java.awt.datatransfer.UnsupportedFlavorException;

import java.io.IOException;

import javax.swing.JFrame;

/**

* 剪贴板监控器

* 负责对剪贴板的监控和操作

* 由于监控需要一个对象作为ClipboardOwner,故不能用静态类

* 不用FlavorListener是因为它仅监控剪贴板中数据类型的变化

*/

public class SystemClipboardMonitor implements ClipboardOwner{

private Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

private boolean going; //控制开关

/*****************

* 开始监视剪贴板 *

* ***************/

public void begin(){

going = true;

//将剪贴板中内容的ClipboardOwner设置为自己

//这样当其中内容变化时,就会触发lostOwnership事件

clipboard.setContents(clipboard.getContents(null), this);

}

/*****************

* 停止监视剪贴板 *

* ***************/

public void stop(){

going = false;

}

/************

* 测试代码 *

* **********/

public static void main(String[] args) {

SystemClipboardMonitor tmp = new SystemClipboardMonitor();

tmp.begin(); //开始监视

new JFrame().setVisible(true);// 软件窗口

}

/*******************************************

* 如果剪贴板的内容改变,则系统自动调用此方法 *

*******************************************/

@Override

public void lostOwnership(Clipboard clipboard, Transferable contents) {

if (going){ //如果是进行中状态,则操作

// 如果不暂停一下,经常会抛出IllegalStateException

// 猜测是操作系统正在使用系统剪切板,故暂时无法访问

try {

Thread.sleep(1);

} catch (InterruptedException e) {

e.printStackTrace();

}

// 取出文本并进行一次文本处理

// 如果剪贴板中有文本:

if (clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor)){

try {

String text = (String)clipboard.getData(DataFlavor.stringFlavor);

String clearedText = Texts.handle(text);

// 存入剪贴板,并注册自己为所有者

// 这样下次剪贴板内容改变时,仍然可以触发此事件

StringSelection tmp = new StringSelection(clearedText);

clipboard.setContents(tmp, this);

} catch (UnsupportedFlavorException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

} else {

// 如果剪贴板中没有文本,仍然将自己设置为它的ClipboardOwner

clipboard.setContents(clipboard.getContents(null), this);

}

}

}

}

java 监测粘贴板事件_Java 监视系统剪贴板相关推荐

  1. java 监控剪切板_Java监视系统剪贴板

    为工作方便写了个小工具,需要监视系统剪贴板,如果文本内容变化,则自动处理并存入剪贴板. FlavorListener仅在剪贴板中的数据类型变化时才生效. 改用ClipboardOwner接口,将它注册 ...

  2. java 文本框输入事件_Java文本框上的ActionEvent事件 | 学步园

    三个概念:事件源, 监视器, 处理事件的接口 事件源 能够产生事件的对象都可以成为事件源,如文本框.按钮.下拉式列表等. 事件源必须是一个对象,而且这个对象必须是 Java认为能够发生事件的对象. 监 ...

  3. java文本框选中事件_Java文本框上的ActionEvent事件

    三个概念:事件源, 监视器, 处理事件的接口 事件源 能够产生事件的对象都可以成为事件源,如文本框.按钮.下拉式列表等. 事件源必须是一个对象,而且这个对象必须是 Java认为能够发生事件的对象. 监 ...

  4. 使用计算机粘贴板的步骤,如何打开剪贴板,详细教您电脑如何打开剪贴板

    使用Windows系统,经常用到就是 "复制"."剪切"."粘贴" 的操作步骤.有时不小心将剪切板中的内容粘贴到某个不知名的地方,导致存储空 ...

  5. java 钩子 64位 操作系统_Java与系统钩子

    在不少java桌面应用中,经常需要实现热键功能,于是只能利用系统键盘钩子实现. public class KeyboardHook { static { try { // System.out.pri ...

  6. java鼠标点击事件_Java 鼠标点击事件实例

    首先我们应该知道鼠标点击事件怎么实现 其部分代码如下 if (anyEvent.getButton() == MouseEvent.BUTTON1) {} e.getButton()返回值分别为NOB ...

  7. java图片点击事件_java中想要点击一个button然后jlabel上就显示出图片,button事件监听该怎么写。...

    展开全部 给个例子你参考一下:给按钮62616964757a686964616fe4b893e5b19e31333332643864bntOk添加监听事件 bntOk.addMouseListener ...

  8. Java编写滴滴租车_Java滴滴打车系统实现(同时实现租车购物车)

    实现过程如下: 构造抽象Auto类:是所有载客类型车的父类,如PassengerAuto类继承了该类 构造抽象类LoadWeight类:是所有既载客又载货车型的父类,如Truck类继承了该类 构造储存 ...

  9. java+获取下个小时_Java获取系统时间少8个小时 | 学步园

    java获取系统时间问题: public class TestDate { public static void main(String[] args) { System.out.println(&q ...

  10. java监听焦点事件_java焦点事件监听器是什么?其他事件有哪些?

    一般来说,java中的知识点都是具有非常强的衍生性的.往往一个知识点后面还有更多的内容,所以学习起来也是比较费工夫的.关于焦点时间监听器也是比较难的,一起来了解一下吧. 首先我们需要知道的是,除了单击 ...

最新文章

  1. 计算机的起源英语作文,冰箱的起源英语作文
  2. 4)线性表[顺序表和链表]
  3. 周五下午3.5h直播丨今年第1期大咖讲坛:数据库高可用容灾方案的实践与探索...
  4. POJ3752 字母旋转游戏【水题】
  5. 计算机网络实验室布线实验,网络综合布线实验室建设
  6. MATLAB 输出当前时间
  7. 各历史版本NDK下载地址
  8. linux运行关关采集器,杰奇小说2.3-自动采集-关关采集器高级版
  9. 盘点城市智慧水务领域的英文期刊
  10. ospf学习-----LSA类型以及stub、nssa区域
  11. 向量代数:混合积、双重外积与拉格朗日恒等式
  12. 云南人,你的家乡在哪里?
  13. 程序员为什么不写注释
  14. 虚幻引擎(UE4) UMG 创建菜单
  15. org.apache.felix.http.jetty %bundles.pluginTitle: Cannot start (org.osgi.framework.BundleException:
  16. 选择第K大元素(快排、快选以及k-选取比较)
  17. Nginx源码阅读:ngx_palloc 内存池
  18. 在altium designer原理图中如何查找相同的网络标号?
  19. Baumer工业相机堡盟工业相机如何联合BGAPISDK和佳能EF变焦镜头实现相机的自动变焦(C++)
  20. 推荐 130 个令你眼前一亮的网站,总有一个用得着

热门文章

  1. 线上故障之-内存问题
  2. 我的梦想是成为一名计算机程序员英语怎么说,我的梦想英语作文带翻译八篇(I have a dream)...
  3. java线程栅栏_用栅栏(CyclicBarrier)实现高并发测试
  4. 统一社会信用代码验证
  5. iOS App配置 Universal Link通用链接
  6. 更改C盘用户目录下的用户名(亲测有效)
  7. BZOJ3162: 独钓寒江雪
  8. 永中office linux卸载,永中office2012forLinux的安装卸载
  9. 苹果保修期查询_苹果手机维修为什么这么贵?
  10. PHP手册 2009国庆版