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) {}
}