Java 从getOnKeyPressed处理EventHandler

Java 从getOnKeyPressed处理EventHandler,java,javafx,event-handling,keypress,Java,Javafx,Event Handling,Keypress,我在fxml中有一个元素,我在那里将method设置为onKeyPressed <TableView fx:id="topTable" onKeyPressed="#copyToClipboard" prefHeight="200.0" prefWidth="200.0"> 但我不明白如何从方法中的这个EventHandler获取键代码 @FXML private TableView<ObservableList<String>> t

我在
fxml
中有一个元素,我在那里将method设置为
onKeyPressed

<TableView fx:id="topTable" onKeyPressed="#copyToClipboard" prefHeight="200.0" prefWidth="200.0">  

但我不明白如何从方法中的这个EventHandler获取键代码

    @FXML
    private TableView<ObservableList<String>> topTable;
    ...
    public void copyToClipboard(){
    System.out.println(topTable.getOnKeyPressed().toString());
}
@FXML
私有表视图topTable;
...
公共作废copyToClipboard(){
System.out.println(topTable.getOnKeyPressed().toString());
}
借助此操作,我想从
TableColumn
的单元格复制数据。
有人能给我解释一下从
getOnKeyPressed
处理程序可以做什么吗

通过FXML添加事件处理程序时,控制器中的方法可以不接受任何参数,也可以接受一个具有适当事件类型的参数。在您的情况下,由于您使用的是
onKeyPressed
,因此可以如下定义控制器方法:

public void copyToClipboard(KeyEvent event) {
    if (event.isShortcutDown() && event.getCode() == KeyCode.C) {
        Clipboard cp = Clipboard.getSystemClipboard();
        // add your data to the clipboard
    }    
}
有关更多信息:

  • Javadoc
  • 文件

要知道参数应该是哪个
事件
类型,请查看您尝试使用的事件处理程序属性。在您的问题中,您正在设置via FXML。此属性具有以下签名:

ObjectProperty<EventHandler<? super KeyEvent>>

*事实并非如此,因为
fxmloader
所做的工作更加复杂(反射)。

非常感谢您的解释!它起作用了!但无论如何,我不明白什么时候可以得到参数,什么时候不能。以及如何知道该参数的
(在您的示例中,它是
KeyEvent
。您是如何得到它的?@БМцц更新的答案。另外,
isShortcutDown
查询特定于平台的快捷键是否已按下。基本上,我的示例代码是这样的:“当按下
Ctrl+C
时复制到剪贴板”(或Mac等效程序)。看见
public class Controller {

    @FXML private TableView<?> topTable;

    @FXML
    private void initialize() {
        topTable.setOnKeyPressed(this::copyToClipboard);
    }

    public void copyToClipboard(KeyEvent event) {}

}