Javafx 一个事件处理程序来捕获它们?
Javafx one eventhandler to catch them all?
我正在尝试使用 javafx 并尝试向我的场景之一添加 EventHandler 或 EventFilter(现在不完全确定有什么区别)。它应该只检测 任何 输入,从鼠标点击到按键。
我能够为鼠标点击编写一个 EventFilter,但我无法让它为一般事件工作。
我目前的想法是:
scene.addEventFilter(Event.ANY, new EventHandler<InputEvent>() {
@Override
public void handle(InputEvent event) {
System.out.println("Event detected! " + event.getSource());
}
});
但是我得到了 addEventFilter 突出显示为红色的错误消息,如下所示:
The method addEventFilter(EventType<T>, EventHandler<? super T>) in the type Scene is not applicable for the arguments (EventType<Event>, new EventHandler<InputEvent>(){})
我是 Java 的新手,我不知道该怎么做。我想在我的场景中捕获输入事件,但不需要为每个可能的事件设置单独的过滤器。
错误消息中显示的方法签名是
addEventFilter(EventType<T>, EventHandler<? super T>)
由于 Event.ANY
是一个 EventType<Event>
,您需要一个 EventHandler<T>
,其中 T
是 Event
或 Event
的超类。即
scene.addEventFilter(Event.ANY, new EventHandler<Event>() {
@Override
public void handle(Event event) {
System.out.println("Event detected! " + event.getSource());
}
});
或者,如果您特别只想捕获 InputEvent
,请注意 InputEvent.ANY
是一个 EventType<InputEvent>
,因此在这种情况下您可以
scene.addEventFilter(InputEvent.ANY, new EventHandler<InputEvent>() {
@Override
public void handle(InputEvent event) {
System.out.println("Event detected! " + event.getSource());
}
});
在更现代的语法中,这些只是
scene.addEventFilter(InputEvent.ANY,
event -> System.out.println("Event detected! " + event.getSource())
);
(或相同,将 InputEvent.ANY
替换为 Event.ANY
)。
请注意,在后一个版本中,所有类型都是自动推断的,因此您基本上避免了犯该错误的可能性。
我正在尝试使用 javafx 并尝试向我的场景之一添加 EventHandler 或 EventFilter(现在不完全确定有什么区别)。它应该只检测 任何 输入,从鼠标点击到按键。
我能够为鼠标点击编写一个 EventFilter,但我无法让它为一般事件工作。
我目前的想法是:
scene.addEventFilter(Event.ANY, new EventHandler<InputEvent>() {
@Override
public void handle(InputEvent event) {
System.out.println("Event detected! " + event.getSource());
}
});
但是我得到了 addEventFilter 突出显示为红色的错误消息,如下所示:
The method addEventFilter(EventType<T>, EventHandler<? super T>) in the type Scene is not applicable for the arguments (EventType<Event>, new EventHandler<InputEvent>(){})
我是 Java 的新手,我不知道该怎么做。我想在我的场景中捕获输入事件,但不需要为每个可能的事件设置单独的过滤器。
错误消息中显示的方法签名是
addEventFilter(EventType<T>, EventHandler<? super T>)
由于 Event.ANY
是一个 EventType<Event>
,您需要一个 EventHandler<T>
,其中 T
是 Event
或 Event
的超类。即
scene.addEventFilter(Event.ANY, new EventHandler<Event>() {
@Override
public void handle(Event event) {
System.out.println("Event detected! " + event.getSource());
}
});
或者,如果您特别只想捕获 InputEvent
,请注意 InputEvent.ANY
是一个 EventType<InputEvent>
,因此在这种情况下您可以
scene.addEventFilter(InputEvent.ANY, new EventHandler<InputEvent>() {
@Override
public void handle(InputEvent event) {
System.out.println("Event detected! " + event.getSource());
}
});
在更现代的语法中,这些只是
scene.addEventFilter(InputEvent.ANY,
event -> System.out.println("Event detected! " + event.getSource())
);
(或相同,将 InputEvent.ANY
替换为 Event.ANY
)。
请注意,在后一个版本中,所有类型都是自动推断的,因此您基本上避免了犯该错误的可能性。