当剪贴板内容在Java之外发生变化时,是否可以被告知
我想做的是,当用户在任何程序(firefox,记事本,pdfReader等)中复制文本时,我已经运行的java应用程序将被告知并立即显示弹出窗口。
我认为为了能够做到这一点,每当系统剪贴板发生变化时,都应该调用我的java应用程序。
这在java中是否可能,如果是这样,在哪个版本中?我知道我们可以访问和操作系统剪贴板内容,但我的具体问题是,当剪贴板内容发生变化时,调用java应用程序。
谢谢
我想做的是,当用户在任何程序(firefox,记事本,pdfReader等)中复制文本时,我已经运行的java应用程序将被告知并立即显示弹出窗口。
我认为为了能够做到这一点,每当系统剪贴板发生变化时,都应该调用我的java应用程序。
这在java中是否可能,如果是这样,在哪个版本中?我知道我们可以访问和操作系统剪贴板内容,但我的具体问题是,当剪贴板内容发生变化时,调用java应用程序。
谢谢
我会天真地假装这是JDIC的工作,但interwebz告诉我真相。所以,让我解释一下。
使用 Toolkit.getSystemClipboard()
,您可以访问本机系统剪贴板。像任何Java对象一样,可以监听此剪贴板。准确地说,你可以调用Clipboard.addFlavorListener(...)
来收听FlavorEvents
。它们是什么?他们是金属之王!....不不不不,我完全和彻底地离题了。让我回来吧。因此,根据文档,FlavorEvent表明
剪贴板(事件源)中的可用数据耗材已更改。
这可能意味着剪贴板内容已更改。但是,如果没有第一个原型,我不会直接使用它。
编辑AlexR手指上的原型示例
import java.awt.Toolkit;
import java.awt.datatransfer.FlavorEvent;
import java.awt.datatransfer.FlavorListener;
public class Main {
public static void main(String[] args) throws Exception {
Toolkit.getDefaultToolkit().getSystemClipboard().addFlavorListener(new FlavorListener() {
@Override
public void flavorsChanged(FlavorEvent e) {
System.out.println("changed!!! " + e.getSource() + " " + e.toString());
}
});
Thread.sleep(100000L);
}
}