使用 JavaFx 监听系统剪贴板

Posted

技术标签:

【中文标题】使用 JavaFx 监听系统剪贴板【英文标题】:Listening on system clipboard using JavaFx 【发布时间】:2014-09-25 18:05:54 【问题描述】:

正如这个问题的答案所述,可以设置一个时间轴来检查系统剪贴板是否有变化:

Set and use variables outside timeline in javafx 8

但是有更好的方法吗?例如,事件监听器?我搜索了 JavaFx 8 文档并没有发现任何明显有用的东西。

首选使用 JavaFx 的解决方案,但欢迎所有答案。

【问题讨论】:

【参考方案1】:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.input.Clipboard;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Main extends Application 

    @Override
    public void start(Stage primaryStage) throws Exception 

        final Clipboard systemClipboard = Clipboard.getSystemClipboard();

        new com.sun.glass.ui.ClipboardAssistance(com.sun.glass.ui.Clipboard.SYSTEM) 
            @Override
            public void contentChanged() 
                System.out.print("System clipboard content changed: ");
                if ( systemClipboard.hasImage() ) 
                    System.out.println("image");
                 else if ( systemClipboard.hasString() ) 
                    System.out.println("string");
                 else if ( systemClipboard.hasFiles() ) 
                    System.out.println("files");
                
            
        ;

        primaryStage.setScene(new Scene(new StackPane()));
        primaryStage.show();
    


测试:

按键打印屏幕 Ctrl+C 选择字符串 Ctrl+c 选择文件

【讨论】:

怎么敢访问内部 api :) +1 这不适用于 macOS 10.12.6 和 Java 8 更新 171。【参考方案2】:

不,没有更好的方法。当剪贴板内容发生变化时(尤其是来自 Java 应用程序的外部),不会发送任何事件,因此只有轮询方法是合适的。

【讨论】:

以上是关于使用 JavaFx 监听系统剪贴板的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 MVC 模型动态过滤 javafx 中的列表视图控件,同时以多种方式更新? [关闭]

Android 从剪贴板管理器复制/粘贴

JavaScript 剪贴板 Clipboard 的那些事儿!

如何监听div内容的改变?

VI/VIM 无法使用系统剪贴板(clipboard)

HarmonyOS之剪贴板的功能分析和使用流程