できません。 JavaFXはjavafx.event.Event
またはサブタイプを使用するため、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);
}
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);
}
}
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);
}
}
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);
}
}
は使用例
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);
}
});
アダプタを実装するだけです。しかし、JavaFXを使うだけで自分のインターフェースを定義するのはどうしてですか? – Michael
同様の質問がすでに議論されています:[カスタムイベントの発行と処理の方法](https://stackoverflow.com/questions/27416758/how-to-emit-and-handle-custom-events) –