[英]How to handle an event from another class in JavaFX?
我正在尝试在Launcher类中创建一个按钮,并在另一个类中创建一个处理函数,如下所示。 但是,处理功能似乎不起作用。 什么都没打印。
我认为函数button.setOnAction(anotherclass)是原因。 在一些教程中,他们说setOnAction()的参数是我放置处理函数的位置。 所以我在那儿放了另一个课。
我知道我可以只在同一个类中创建一个处理函数,也可以只使用lambda。 但是,我试图看看这种方式是否有效。
public class Launcher extends Application{
public static Button button;
AnotherClass anotherclass;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage myStage) throws Exception {
button = new Button("Click me");
button.setOnAction(anotherclass);
StackPane layout = new StackPane();
layout.getChildren().add(button);
Scene scene = new Scene(layout, 300, 250);
myStage.setScene(scene);
myStage.show();
}
}
public class AnotherClass implements EventHandler<ActionEvent>{
@Override
public void handle(ActionEvent event) {
if(event.getSource()== Launcher.button) {
System.out.println("print");
}
}
}
谁能帮助我在不同于按钮的类中创建处理函数?
仅仅为了处理一个事件而创建一个完全不同的类,这将是一个非常奇怪的设计,但是可以做到。 只是不是您尝试这样做的方式。
如果您AnotherClass
使用此单独的AnotherClass
来处理它,则只需将带有new
关键字的类传递给实例实例即可:
button.setOnAction(new AnotherClass());
但是,由于以下几个原因,这将是糟糕的设计:
public
修饰符公开Button
。 这是一个坏主意,并且违反了封装原理。 我的建议是在setOnAction()
方法中使用匿名类和lambda表达式:
button.setOnAction(event -> {
System.out.println("print");
}
这将具有与您当前的AnotherClass
实现相同的结果,但更易于阅读,更易于维护,将按钮的逻辑保持在同一代码中,并且不需要您公开公开Button
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.