java - 当剪贴板内容在java之外发生变化时是否可以得到通知

标签 java swing clipboard

我想做的是,当用户在任何程序(firefox、记事本、pdfReader 等)中复制文本时,我已经在运行的 java 应用程序应该得到通知并立即显示一个弹出窗口。

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

Java 可以吗,如果可以的话是哪个版本?我知道我们可以访问和操作系统剪贴板内容,但我的具体问题是关于调用 java 应用程序。当剪贴板内容改变时。

谢谢

最佳答案

我会天真地假装这是 JDIC 的工作,但 interwebz 告诉我真相。那么,让我稍微解释一下。

使用 Toolkit.getSystemClipboard() ,您可以访问 native 系统剪贴板。与任何 Java 对象一样,可以监听此剪贴板。准确的说,你可以调用Clipboard.addFlavorListener(...)FlavorEvents .这些是什么 ? They're the metal kings ! ....不不不,我完全离题了。让我回来。因此,根据文档,FlavorEvent 表示

that available DataFlavors have changed in the Clipboard (the event source).

可能表示剪贴板内容已更改。但是,如果没有第一个原型(prototype),我不会直接进行下去。

编辑 AlexR 手指的原型(prototype)示例

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); 
    }
}

关于java - 当剪贴板内容在java之外发生变化时是否可以得到通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4802982/

相关文章:

java - PaintComponent 没有删除 JPanel

Notepad++:如何获取当前文件的文件名/路径并将其放入记事本 plus plus 的剪贴板中

java - 从 ClassA 设置和获取 ClassB 类型的属性

java - 如何用java从网站上检索单条数据?

java - 当 ie7 和 ie8 说 "to help protect your bla bla"时,我怎么能意识到?因为它阻止我的 servlet 将字节数组作为文件下载

java - 如何将测试生成的源保留在生成的源目标文件夹之外

java - Swing 和 javafx

java - TextAreaSample JTextArea JScrollPane

vba - 如何检查剪贴板是否为空文本?

java - 在 Android 中从剪贴板粘贴