Java 跨平台侦听和注入粘贴操作 主要问题

Java 跨平台侦听和注入粘贴操作 主要问题,java,javafx,copy-paste,Java,Javafx,Copy Paste,我想截取粘贴到我的JavaFX应用程序中的操作(特别是在HTMLEditor中),以便我可以清理用户可以输入的内容。现在,我可以使用以下命令在windows中截获该命令: //In the initalize method of an HTMLEditor super.addEventFilter(KeyEvent.KEY_PRESSED, e -> { if(e.isControlDown() && e.getCode() == KeyCode.V) {

我想截取粘贴到我的JavaFX应用程序中的操作(特别是在HTMLEditor中),以便我可以清理用户可以输入的内容。现在,我可以使用以下命令在windows中截获该命令:

//In the initalize method of an HTMLEditor
super.addEventFilter(KeyEvent.KEY_PRESSED, e -> {
    if(e.isControlDown() && e.getCode() == KeyCode.V) {
        modifyClipboardForNextPaste();
    }
});
但是OSX的粘贴命令是“command+v”,因此不会拾取这些命令。我是否可以添加某种类型的过滤器来拾取粘贴事件本身,而不是可能绑定到或不绑定到操作系统上粘贴事件的键

相关问题: 当用户在我使用以下代码制作的上下文菜单上选择粘贴选项时,我还尝试插入粘贴命令:

Robot robot = new Robot();
robot.keyPress(java.awt.event.KeyEvent.VK_CONTROL);
robot.keyPress(java.awt.event.KeyEvent.VK_V);
robot.keyRelease(java.awt.event.KeyEvent.VK_V);
robot.keyRelease(java.awt.event.KeyEvent.VK_CONTROL);

这与上面的问题相同,OSX用户或修改其粘贴命令的用户没有得到这一点。

上面的评论已经回答了这个问题。为了方便起见,我在这里添加了实际代码:

导入javafx.scene.input.Clipboard;
导入javafx.scene.input.KeyCode;
导入javafx.scene.input.KeyEvent;
public void enableplaste(){
super.addEventFilter(按下KeyEvent.KEY,e->{
if(e.isShortcutDown()&&e.getCode()==KeyCode.V){
剪贴板=剪贴板。getSystemClipboard();
//你在这里的行为。
//if(剪贴板.hasUrl()){
//  
//}
}
});
}

注意,它将捕获windows上的控件和OSX上的cmd;但是,拦截语义“粘贴”命令更好,这是正确的。对于文本输入控件,您可以简单地覆盖或(更好地)使用带有过滤器的;如果说
HTMLEditor
@James\u D中没有等价物,那么感谢您的输入,我将使用isShortcutDown()并在主机操作系统为mac的情况下将meta添加到粘贴命令中。