JavaFX:在子类和超类中执行事件

JavaFX: execute events in Sub- and in SuperClass

如果我像这样在超类中实现 onMouseClicked-EventHandler:

public class SuperClass {
    public SuperClass() {
                
        setOnMouseClicked(new EventHandler<Event>() {
            @Override
            public void handle(Event event) {
                System.out.println("Super reacted");
            }
        });
    }

然后我在超类的子类中实现了一个 onMouseClicked-EventHandler,如下所示:

public class SubClass extends SuperClass{
    public SubClass() {
                
        setOnMouseClicked(new EventHandler<Event>() {
            @Override
            public void handle(Event event) {
                System.out.println("Sub reacted");
        });
    }
}

单击 SubClass 的实例后,控制台中的结果将是“Sub reacted”。所以 SuperClass 没有注意到这个事件。

我怎样才能以某种方式转发事件,让所有超级 classes 也做出反应?我想在子 class 中手动触发一个事件,但它不起作用。

感谢您的帮助。

有两种方法可以在 JavaFX 中注册小部件:

  • setOnMouseClicked(所有 setOn... 方法)。与 setOnMouseClicked 关联的处理程序是唯一的:在您的情况下,sub-class 注册替换了在超级 class.
  • 中进行的注册
  • addEventHandler(或AddEventFilter)。在这种情况下,您可以让多个处理程序注册到同一个小部件。这些方法将以下参数作为参数:您要收听的事件类型;类型 EventHandler<> 的实例,您可以将其编写为回调或匿名 class。 你的情况:
addEventHandler(MouseEvent.MOUSE_CLICKED, evt -> {
 // ... 
});

或使用匿名 class:

addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
   @Override
   public void handle(final MouseEvent evt) {
   }
});

其中evt为触发的鼠标点击事件

使用 addEventHandler 应该可以解决您的问题。