如何从 JavaFX 中的一个类处理多种事件类型?

Sam*_*aus 2 java javafx javafx-2

在 JavaFX 中,是否可以从一个类中处理多种事件类型(例如 ActionEvent、MouseEvent 等),而无需匿名 EventHandler?我尝试了以下操作,但这只是创建了一个编译时错误。

public class GUI extends Application implements EventHandler<ActionEvent>,
                                                EventHandler<MouseEvent>
Run Code Online (Sandbox Code Playgroud)

小智 5

是的,但不是您期望的方式。

据我所知,即使使用不同的类型,您也不能两次实现相同的接口。

EventHandler<ActionEvent> and EventHandler<MouseEvent> 彼此冲突,这就是为什么你最终会出现错误。

像这样...

class CustomEventHandler implements EventHandler<Event>{

    public void handleActionEvent(ActionEvent ke){
        //handle event
    }

    public void handleMouseEvent(MouseEvent me){
        //handle event
    }

    @Override
    public void handle(Event event) {
        //handle event testing
    }

}
Run Code Online (Sandbox Code Playgroud)

然后您只需测试事件是鼠标类型还是动作类型,然后从该函数处理事件。

  • 当然,与具有两个不同类的标准机制相比,这没有明显的优势;虽然这确实正确回答了提出的问题。没有办法在同一个类中实现`EventHandler&lt;MouseEvent&gt;` 和`EventHandler&lt;ActionEvent&gt;`,因为在类型擦除之后(即在运行时)这两个方法具有相同的签名,因此是不明确的。 (3认同)