我有以下示例,其中我想将我的参数"text"与我的事件一起传递(当我的按钮"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);
//...
}
Run Code Online (Sandbox Code Playgroud)
小问题:
当我有以下内容时:
object1.setOnMouseClicked( event -> {
System.out.println("HELLO");
});
object2.setOnMouseClicked( event -> {
System.out.println("HELLO");
});
Run Code Online (Sandbox Code Playgroud)
两个对象,当它们"setOnMouseClicked"时做同样的事情.是否有合并它们的语法?
有多种方法可以实现.如果要传递的参数是事件源或目标的一部分,您可以:
但是,如果参数与事件无关,则必须编写自定义事件:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在要使用该事件,您首先必须解雇它.
你可以这样做
objectThatWillFireThisEvent.fireEvent(new CustomEvent("Get this parameter guys!"));
Run Code Online (Sandbox Code Playgroud)
所以你现在用参数触发了一个事件.现在设置EventHandler,将其添加到将触发事件的对象的类中:
public final void setOnCustomEvent(
EventHandler<? super CustomEvent> value) {
this.addEventHandler(CustomEvent.CUSTOM, value);
}
Run Code Online (Sandbox Code Playgroud)
现在您可以设置事件处理程序:
objectThatWillFireTheEvent.setOnCustomEvent( event -> {
System.out.println(event.getParameter());
});
Run Code Online (Sandbox Code Playgroud)
或者,如果想要,您可以使用编写在问题中发布的事件处理程序的方式(如果您不想使用lambdas).
或者您可以调用您编写的函数,该函数应该处理该参数:
objectThatWillFireTheEvent.setOnCustomEvent( event -> myFunction(event.getParameter) );
Run Code Online (Sandbox Code Playgroud)
我希望我没有做任何错别字.但是如果某些东西不起作用或者您还有其他问题,请不要犹豫!:)
除此之外,我建议你去谷歌投射(如果你还不知道)以及更多自定义事件(因为我的回答只是一个起点,如果你想用自定义事件做更多疯狂的事情,最好阅读在那:D)
编辑:这是你在评论中的意思吗?
由于评论会破坏布局和可读性
String text = "This is text!";
Button button = new Button();
object.setOnMouseClicked( event -> {
function1(text);
function2(button);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5006 次 |
| 最近记录: |