2016-06-07 142 views
0

我是javaFX的新手,我正在尝试编程图形计算器。 现在我想知道是否有方法通过按setOnAction按钮来更改值?如何通过按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

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

最简单的解决方法就是使变量成为实例变量。以下编译:

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

    } 
}