如何在Mouse事件类中使用方法的变量?

时间:2015-12-12 19:06:13

标签: java button mouseevent javafx-8

我在javafx中有这样的代码,

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

/**
 *
 * @author deb-l-ana
 */
public class NewFXMain extends Application {

    @Override
    public void start(Stage primaryStage) {
        Group root=new Group();
        Scene scene=new Scene(root,500,500,true);
        int ctr=0;
        Button b1=new Button("b1");
        b1.setTranslateX(90);
        root.getChildren().add(b1);
        b1.setOnAction(e -> {
            ctr=1;
        });
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

这给我一个编译错误

  

从lambda表达式引用的局部变量必须是最终的或有效的最终

但如果我宣布ctr为最终,我无法修改它。我能做什么才能从lambda表达式修改局部变量?但是如果我使用一个数组,ctr1[]={0}只有一个元素,那么我可以从lambda表达式引用它,这很好。  为什么会发生这种情况?如何从鼠标单击事件更新ctr的值?

1 个答案:

答案 0 :(得分:-1)

我无法比他更好地解释:https://stackoverflow.com/a/12750186/5677103 “整数是不可变的[...]但你可以设计自己的类来嵌入一个整数并使用它来代替整数。”

public class MutableInteger {
    private int value;
    public MutableInteger(int value) {
        this.value = value;
    }
    public int getValue() {
        return value;
    }
    public void setValue(int value) {
        this.value = value;
    }
}

无法修改最终对象的实例,但他的属性可以是。而且,int是一个私有类型,Integer是一个包装这种类型的对象。