我是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);
}
答案 0 :(得分:1)
value
是一个局部变量(在方法中声明)。无法在lambda表达式或匿名类中重新分配局部变量。 (它们必须是最终的,或者必须是最终的。)基本思想是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);
}
}