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
应该可以解决您的问题。
如果我像这样在超类中实现 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
应该可以解决您的问题。