当剪贴板内容在java之外发生更改时,是否可以获得通知

时间:2011-01-26 09:29:24

标签: java swing clipboard

我想要做的是当用户在任何程序(firefox,notepad,pdfReader等)中复制文本时,我的已经运行的java应用程序将被通知并立即显示弹出窗口。

我认为为了能够做到这一点,只要系统剪贴板发生变化,就应该调用我的java应用程序。

这可能与java,如果是这样在哪个版本?我知道我们可以访问和操作系统剪贴板内容,但我的具体问题是关于调用java应用程序。当剪贴板内容发生变化时。

由于

1 个答案:

答案 0 :(得分:9)

我天真地假装它是JDIC的工作,但是interwebz告诉了我实情。所以,让我解释一下。

使用Toolkit.getSystemClipboard(),您可以访问本机系统剪贴板。与任何Java对象一样,可以监听此剪贴板。确切地说,您可以拨打Clipboard.addFlavorListener(...)来收听FlavorEvents。这些是什么 ? They're the metal kings ! ......不,不,我完全彻底地离题了。让我回来吧。因此,根据文档,FlavorEvent指出

  

剪贴板(事件源)中可用的DataFlavor已更改。

可能表示剪贴板内容已更改。但是,如果没有第一个原型,我就不会直接使用它。

编辑来自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); 
    }
}