java监听剪贴板_Java监视系统剪贴板

深藏阁楼爱情的钟 2022-11-03 04:09 289阅读 0赞

为工作方便写了个小工具,需要监视系统剪贴板,如果文本内容变化,则自动处理并存入剪贴板。

FlavorListener仅在剪贴板中的数据类型变化时才生效。

改用ClipboardOwner接口,将它注册到剪贴板,当剪贴板中的内容变化时,当前对象失去了所有权,会自动调用接口中的lostOwnership(Clipboard clipboard, Transferable contents)方法,从而达到监控剪贴板的目的。

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;

/**

* 剪贴板监控器

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

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

*

*/

public class SystemClipboardMonitor implements ClipboardOwner{

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

public SystemClipboardMonitor(){

//如果剪贴板中有文本,则将它的ClipboardOwner设为自己

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

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

}

}

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

* 测试代码 *

* **********

*/

public static void main(String[] args) {

SystemClipboardMonitor temp = new SystemClipboardMonitor();

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

}

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

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

**********************************************

*/

@Override

public void lostOwnership(Clipboard clipboard, Transferable contents) {

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

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

try {

Thread.sleep(1);

} catch (InterruptedException e) {

e.printStackTrace();

}

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

String text = null;

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

try {

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

} catch (UnsupportedFlavorException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

String clearedText = Text.handle(text); // 自定义的处理方法

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

// 用以监控下一次剪贴板内容变化

StringSelection tmp = new StringSelection(clearedText);

clipboard.setContents(tmp, this);

}

}

发表评论

表情:
评论列表 (有 0 条评论,289人围观)

还没有评论,来说两句吧...

相关阅读

    相关 进程通信——剪贴板

    进程通信——剪贴板 一、简介 1.1 定义 剪贴板是由操作系统维护的一块内存区域,这块内存区域不属于任何单独的进程,但是每一个进程又都可以访问这块内存区域,而

    相关 QClipboard 剪贴板

    在Qt中,我们可以使用QClipboard类来访问窗口系统的剪贴板对象。剪贴板为我们在不同的应用间拷贝粘贴数据提供了一种简单的机制。并且,其所支持的数据类型和Qt中的拖放操作所

    相关 javascript 复制到剪贴板

    > 前言: > >        想实现一个点击复制事件,但是以前没有进行过相关操作.找了一些资料,多数是过时 或者 写的看不懂的.于是自己搞懂了之后在此分享自己的成果.