微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaFX:在SubClass和SuperClass中执行事件

如何解决JavaFX:在SubClass和SuperClass中执行事件

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

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

在这样的SuperClass的子类中实现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不会注意到该事件。

我该如何以某种方式转发事件,所有超类也都会做出反应?我曾想过在子类中手动触发一个事件,但是它并没有起作用。

谢谢您的帮助。

解决方法

在JavaFX中有两种向小部件注册的方法:

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

或使用匿名类:

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

evt是触发的鼠标单击事件。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。