我有以下构造函数,它定义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
?
答案 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();
}
});
您的button2
是JButton
,并且它没有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>