您可以采用多种方法。
如果您要传递的参数是事件源或目标的一部分,您可以:
- 使用 getSource 或 getTarget
- 检查源或目标的类别
- 将源/目标强制转换为该类
- 通过该类的 getter 和 setter 访问参数
但是,如果参数与事件无关,则必须编写自定义事件:
class CustomEvent extends Event {
private String parameter;
public static final EventType<CustomEvent> CUSTOM = new EventType(ANY, "CUSTOM");
public CustomEvent(String parameter) {
super(CustomEvent.CUSTOM);
this.parameter = parameter;
}
public String getParameter() {
return this.parameter;
}
}
现在要使用该事件,您首先必须触发它。
你可以这样做
objectThatWillFireThisEvent.fireEvent(new CustomEvent("Get this parameter guys!"));
现在您使用参数触发了一个事件。现在要设置 EventHandler,只需将其添加到将触发事件的对象的类中:
public final void setOnCustomEvent(
EventHandler<? super CustomEvent> value) {
this.addEventHandler(CustomEvent.CUSTOM, value);
}
现在您可以设置事件处理程序:
objectThatWillFireTheEvent.setOnCustomEvent( event -> {
System.out.println(event.getParameter());
});
或者,如果需要,您可以使用在问题中发布的编写事件处理程序的方法(如果您不想使用 lambda)。
或者您可以只调用您编写的函数,该函数应该处理该参数:
objectThatWillFireTheEvent.setOnCustomEvent( event -> myFunction(event.getParameter) );
我希望我没有犯任何错别字。但如果有些问题不起作用或者您还有其他问题,请随时询问! :)
除此之外,我建议您使用谷歌铸造(如果您还不知道)以及更多有关自定义事件的信息(因为我的答案只是一个起点,如果您想对自定义事件做更多疯狂的事情,最好阅读就这一点:D)
编辑:
这就是你在评论中的意思吗?
因为注释会破坏布局和可读性
String text = "This is text!";
Button button = new Button();
object.setOnMouseClicked( event -> {
function1(text);
function2(button);
});