使用 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 中的列表视图控件,同时以多种方式更新? [关闭]