【问题标题】:Using same EventHandler for MouseEvent & KeyEvent in JavaFX?在 JavaFX 中对 MouseEvent 和 KeyEvent 使用相同的 EventHandler?
【发布时间】:2016-02-13 18:25:28
【问题描述】:

我是 Java 编程新手,所以这个问题对这里的许多人来说可能听起来很愚蠢。我正在努力让自己对 JavaFX 事件处理机制感到满意。

我正在开发一个 GUI,我希望按钮在单击时以及按下 Enter 键时执行相同的功能。

我可以执行以下操作吗?

public class ButtonHandler implements EventHandler<ActionEvent>
{
somefunction();
}

然后将它用于 KeyEvent 和 MouseEvent

button.setOnMouseClicked(new ButtonHandler);
button.setOnKeyPressed(new ButtonHandler);

【问题讨论】:

    标签: java javafx event-handling javafx-8 eventhandler


    【解决方案1】:

    只要你不需要来自特定事件的任何信息(例如鼠标的坐标,或者被按下的键),你就可以这样做

    EventHandler<Event> handler = event -> {
        // handler code here...
    };
    

    然后

    button.addEventHandler(MouseEvent.MOUSE_CLICKED, handler);
    button.addEventHandler(KeyEvent.KEY_PRESSED, handler);
    

    当然,您也可以将实际工作委托给常规方法:

    button.setOnMouseClicked(e -> {
        doHandle();
    });
    button.setOnKeyPressed(e -> {
        doHandle();
    });
    
    // ...
    
    private void doHandle() {
        // handle event here...
    }
    

    【讨论】:

    • 所以当我希望仅在按下 ENTER 时处理按钮事件时,我可以不按照您的建议进行吗?
    • 不,但您可以将实际工作委托给另一个方法。查看更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    相关资源
    最近更新 更多