java - 从 getOnKeyPressed 处理 EventHandler

标签 java javafx event-handling keypress

我在fxml中有元素,并且我在onKeyPressed那里设置了方法

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

但我不明白如何从方法中的此 EventHandler 获取 KeyCode。

    @FXML
    private TableView<ObservableList<String>> topTable;
    ...
    public void copyToClipboard(){
    System.out.println(topTable.getOnKeyPressed().toString());
}

借助此操作,我想从 TableColumn 的单元格复制数据。 有人可以解释一下我可以使用 getOnKeyPressed 中的 Handler 做什么吗?

最佳答案

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

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

了解更多信息:

<小时/>

要了解参数应属于哪种Event类型,请查看您尝试使用的事件处理程序属性。在您的问题中,您设置 onKeyPressed property通过 FXML。该属性具有以下签名:

ObjectProperty<EventHandler<? super KeyEvent>>

EventHandler 应该处理的 Event 类型在 EventHandler 的通用类型中声明;在本例中为KeyEvent

有许多为 Node 声明的“事件处理程序属性”。某些子类将添加自己的属性,例如 ButtonBaseonAction 属性(使用 ActionEvent)。

如果有帮助,您可以考虑从 FXML 设置事件处理程序属性,就像使用方法引用一样*:

public class Controller {

    @FXML private TableView<?> topTable;

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

    public void copyToClipboard(KeyEvent event) {}

}

* 实际上情况并非如此,因为 FXMLLoader 所做的事情更为复杂(反射)。

关于java - 从 getOnKeyPressed 处理 EventHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52454459/

相关文章:

java - @Autowired 找不到存储库 bean

javafx - 如何使所有具有 ActionEvent 处理程序的按钮处理 JavaFX 中的 Enter 键?

javafx - 如何调整 Javafx 未装饰阶段的大小?

javascript - D3 : How do I set "click" event and "dbclick" event at the same time?

c - 将 epoll 与 NetLink(套接字)和 Ncurses 一起使用

java - 如何通过 Maven Surefire 插件运行选定的 suiteXmlFile

MenuItem/MenuBar 和声音播放器的 Java 退出按钮

java - Spring MVC : correct package for POJO used in services

Eclipse 4.9 上的 Java 11 和 E(fx)clipse JavaFX 插件 : An error has occurred - see the log file

vb.net - VB流行颜色选择器