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

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

Set and use variables outside timeline in javafx 8

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

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

【问题讨论】:

    标签: java javafx clipboard javafx-8


    【解决方案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 应用程序的外部),不会发送任何事件,因此只有轮询方法是合适的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-07
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多