我试图编写我的第一个Swing应用程序,它是Java中的一个简单的国际象棋引擎。我制作了一个JButtons网格来表示正方形。看起来不错,但在尝试将ActionListeners添加到每个方块时,我遇到了一个问题。我希望获得正方形坐标,并在点击时将其打印到控制台。这就是我尝试过的(我想我不太了解ActionListeners的工作方式):
// chessBoardSquares[][] is an 8x8 array of Jbuttons
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
chessBoardSquares[i][j].addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("x: "+i+"y: "+j);
}
});
}
}
答案 0 :(得分:3)
您需要在匿名内部类中使用字段或最终局部变量。
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
final int finalI = i;
final int finalJ = j;
chessBoardSquares[i][j].addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("x: " + finalI +"y: " + finalJ);
}
});
}
}