如何在JavaFX应用程序中读取X11剪贴板?

4

我正在开发一个JavaFX应用程序,希望支持在X11环境下通过中键粘贴文本。

有没有一种方法可以在Java/JavaFX中访问X11剪贴板的内容?


javafx.scene.input.Clipboard 有什么问题吗?它代表了操作系统的剪贴板,在其中可以进行剪切、复制和粘贴等操作。 - MadProgrammer
1
@MadProgrammer:是的,这不是我想要的;-) X11桌面环境往往有两个剪贴板:一个通过在某个地方选择一些文本来填充,另一个需要复制事件(类似于Ctrl+C)。Clipboard类似乎只处理后者,而我想要前者。 - Peter Becker
鉴于其专业性质,我认为直接回答是否定的,因为API会尝试遵循最小阻力/最低公共分母的路径,但这不是我的专业领域... - MadProgrammer
那不是剪贴板,那是选择。我对JavaFX一无所知;在老派的Java中,那将是 sun.awt.X11.XSelection - n. m.
我也有这个问题 - Unix 鼠标剪贴板无法工作,无法通过选择文本进行复制,也无法通过单击滚动鼠标按钮进行粘贴。 - SomethingSomething
2个回答

2

访问X11选择剪贴板:

所需导入项:

import sun.awt.X11.XClipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;

代码:

XClipboard xClipboard = new XClipboard("Selection", "PRIMARY");
// Set value:
xClipboard.setContents(new StringSelection("Hello"), null);
// Read value:
String stored = xClipboard.getData(DataFlavor.stringFlavor).toString();

重要的提示是值为SelectionPRIMARY,如果您编写:
clipboard = new XClipboard("System", "CLIPBOARD");

你将会读取系统剪贴板。最初的回答。

1

根据https://bugs.openjdk.java.net/browse/JDK-8088117,在JavaFX中无法访问Selection。

错误报告

在SUSE11上使用Java8u45的JavaFX-8,没有使用鼠标选择或单击滚动条进行复制/粘贴的可能性。请查看此处的详细信息:https://dev59.com/M4rda4cB1Zd3GeqPMnVB

回答

将优先级降低到P4。我注意到这更像是未实现的功能而不是错误(它从未在FX中得到支持)。我们将在JDK 9中考虑它。 解决方法:使用复制/粘贴(CTRL-C / CTRL-V)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接