Nic*_*_93 4 java events javafx listener
我有一个自定义事件侦听器:
public interface IMyCustomListener {
public void onEvent1(int param0);
public void onEvent2(String param0);
}
Run Code Online (Sandbox Code Playgroud)
现在我将使用 javafx 事件模式(Event、EventTarget、EventHandler...)触发事件,我该怎么做?
你不能。JavaFX 使用javafx.event.Events 或子类型,因此String甚至int无法传递原始类型。
但是,您可以创建自定义子类型Event并将参数添加到此类。
同样,只有实现的类javafx.event.EventHandler才能注册为事件处理程序。
您可以创建一个委托给您的方法的事件处理程序类:
public abstract class CustomEvent extends Event {
public static final EventType<CustomEvent> CUSTOM_EVENT_TYPE = new EventType(ANY);
public CustomEvent(EventType<? extends Event> eventType) {
super(eventType);
}
public abstract void invokeHandler(MyCustomEventHandler handler);
}
Run Code Online (Sandbox Code Playgroud)
public class CustomEvent1 extends CustomEvent {
public static final EventType<CustomEvent> CUSTOM_EVENT_TYPE_1 = new EventType(CUSTOM_EVENT_TYPE, "CustomEvent1");
private final int param;
public CustomEvent1(int param) {
super(CUSTOM_EVENT_TYPE_1);
this.param = param;
}
@Override
public void invokeHandler(MyCustomEventHandler handler) {
handler.onEvent1(param);
}
}
Run Code Online (Sandbox Code Playgroud)
public class CustomEvent2 extends CustomEvent {
public static final EventType<CustomEvent> CUSTOM_EVENT_TYPE_2 = new EventType(CUSTOM_EVENT_TYPE, "CustomEvent2");
private final String param;
public CustomEvent2(String param) {
super(CUSTOM_EVENT_TYPE_2);
this.param = param;
}
@Override
public void invokeHandler(MyCustomEventHandler handler) {
handler.onEvent2(param);
}
}
Run Code Online (Sandbox Code Playgroud)
public abstract class MyCustomEventHandler implements EventHandler<CustomEvent> {
public abstract void onEvent1(int param0);
public abstract void onEvent2(String param0);
@Override
public void handle(CustomEvent event) {
event.invokeHandler(this);
}
}
Run Code Online (Sandbox Code Playgroud)
使用示例
Button btn = new Button("Say 'Hello World'");
btn.setOnAction((ActionEvent event) -> {
btn.fireEvent(new CustomEvent1(42));
btn.fireEvent(new CustomEvent2("Hello World"));
});
btn.addEventHandler(CustomEvent.CUSTOM_EVENT_TYPE, new MyCustomEventHandler() {
@Override
public void onEvent1(int param0) {
System.out.println("integer parameter: " + param0);
}
@Override
public void onEvent2(String param0) {
System.out.println("string parameter: "+param0);
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5830 次 |
| 最近记录: |