使用JavaFx在系统剪贴板上进行侦听

时间:2014-08-02 19:52:57

标签: java javafx clipboard javafx-8

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

Set and use variables outside timeline in javafx 8

但是有更好的方法吗?例如,一个事件监听器?我搜索过JavaFx 8 doc并没有找到任何明显有用的东西。

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

2 个答案:

答案 0 :(得分:5)

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表示所选文件

答案 1 :(得分:0)

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