gpt4 book ai didi

java - 如何在 javafx 中通过事件传递参数?

转载 作者:行者123 更新时间:2023-12-04 00:39:17 28 4
gpt4 key购买 nike

我有以下示例,我想将我的参数“文本”与我的事件一起传递(当我的按钮“bla”被单击时)。我该怎么做?

  EventHandler<MouseEvent> handler = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
System.out.println(text);
}
};

public void test(){
//...

Text text = "123567";

bla.setOnMousePressed(handler);

//...
}

小问题:

当我有以下情况时:

   object1.setOnMouseClicked( event -> {
System.out.println("HELLO");
});

object2.setOnMouseClicked( event -> {
System.out.println("HELLO");
});

两个对象,在对它们执行“setOnMouseClicked”时执行相同的操作。有什么语法可以合并它们吗?

最佳答案

您可以通过多种方式进行操作。如果您要传递的参数是事件源或目标的一部分,您可以:

  • 使用 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) );

希望我没有打错字。但是,如果某些东西不起作用或者您还有其他问题,请不要犹豫,尽管问! :)

除此之外,我建议您使用 google casting(如果您还不知道)和更多关于自定义事件的信息(因为我的回答只是一个起点,如果您想对自定义事件做更多疯狂的事情,那就是最好阅读一下 :D)

编辑:这就是您在评论中的意思吗?

因为注释会破坏布局和可读性

String text = "This is text!";
Button button = new Button();
object.setOnMouseClicked( event -> {
function1(text);
function2(button);
});

关于java - 如何在 javafx 中通过事件传递参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35372236/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com