如果我在一个SuperClass中实现一个onMouseClickd EventHandler,如下所示:
public class SuperClass {
public SuperClass() {
setOnMouseClicked(new EventHandler<Event>() {
@Override
public void handle(Event event) {
System.out.println("Super reacted");
}
});
}
我在SuperClass的一个子类中实现了一个onMouseClickdEventHandler,如下所示:
public class SubClass extends SuperClass{
public SubClass() {
setOnMouseClicked(new EventHandler<Event>() {
@Override
public void handle(Event event) {
System.out.println("Sub reacted");
});
}
}
在点击SubClass的实例之后,控制台中的结果将是";副反应";。因此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
应该可以解决您的问题。