如何解决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 举报,一经查实,本站将立刻删除。