JavaFX:在Sub和SuperClass中执行事件



如果我在一个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应该可以解决您的问题。

相关内容

  • 没有找到相关文章

最新更新