如何访问布尔数组Java

时间:2013-05-14 15:34:37

标签: java

我有以下构造函数,它定义board并检查是否已点击三个JButton中的任何一个:

Timer timer = new Timer(500, this);

private boolean[][] board;
private boolean isActive = true;
private int height;
private int width;
private int multiplier = 40;

JButton button1;
JButton button2;
JButton button3;
public Board(boolean[][] board) {
    this.board = board;
    height = board.length;
    width = board[0].length;
    setBackground(Color.black);
    button1 = new JButton("Stop");
    add(button1);
    button1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            isActive = !isActive;
            button1.setText(isActive ? "Stop" : "Start");
        }
    });
    button2 = new JButton("Random");
    add(button2);
    button2.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            this.board = randomBoard();
        }
    });
    button3 = new JButton("Clear");
    add(button3);
    button3.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            this.board = clearBoard();
        }
    });
}

但它会返回此错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    board cannot be resolved or is not a field
    board cannot be resolved or is not a field

这是为什么?如何在构造函数中访问this.board

4 个答案:

答案 0 :(得分:4)

问题是由您尝试访问匿名内部类中的this.board引起的。由于没有定义board字段,因此会导致错误。

例如:

button2.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        this.board = randomBoard();
    }
});

为了能够在匿名内部类中使用board变量,您需要删除this或使用Board.this.board之类的内容(如果您想要更明确)

答案 1 :(得分:0)

问题出在这里

button2.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        this.board = randomBoard();
    }
});

您的button2JButton,并且它没有board字段。请勿使用this.board访问它。找到另一种访问board的方式。


快速而肮脏的方法是将board设为静态,但我确信JButton有一种方法可以指定父级(您的棋盘类),并以这种方式访问​​board字段。

快速查看The documentation for JButton后,我发现了getParent方法。我从那开始。

答案 2 :(得分:0)

这应该有效:

Board.this.board = randomBoard();

问题是this与ActionListener类没有董事会变量有关。但是对于Board.this,您指定您是指Board类的董事会成员。这是嵌套类用于访问外部类变量的语法。

答案 3 :(得分:-1)

正如其他人和编译器所说,你没有一个字段(instance member),但只有一个local variable板,一旦构造函数退出就会超出范围。< / p>