如何通过按下带有setOnAction的按钮来更改值?

时间:2016-06-07 19:50:14

标签: java javafx

我是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);

}

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);

    }
}
相关问题