如何通过使用setOnAction按下按钮来更改值



我是javaFX的新手,正在尝试编程一个图形计算器。现在我想知道是否有一种方法可以通过按下带有setOnAction的按钮来更改值?

public class exampleFX extends Application{
public static void main(String[] args){
launch(args);
}
public void start(Stage primaryStage) {
int value=0;
Button button = new Button();
// just as an example i do know i can't change a variable in a lambda expression
button.setOnAction( e -> value +=1);
}

value是一个局部变量(在方法中声明)。不能在lambda表达式或匿名类中为局部变量重新分配新值。(它们必须是final,或者实际上是final。)基本思想是lambda表达式e -> value+=1将在稍后的日期执行(当按下按钮时),此时变量超出范围(封闭的start()方法将完成)。虽然语言作者有一些方法可以做到这一点,但更改不再出现在范围中的变量的值有点违背直觉,因此这是不允许的。

因此,最简单的修复方法是将变量设置为实例变量。以下编译:

public class ExampleFX extends Application{
private int value = 0 ;
public static void main(String[] args){
launch(args);
}
public void start(Stage primaryStage) {
Button button = new Button();
button.setOnAction( e -> value +=1);
}
}

最新更新