我正在编写一个简单的程序,但是有一个我无法解决的问题。
我正在使用这样的循环创建textFields:
testText = new JTextField[9][9];
for(int x = 0; x < 9; x++)
for(int y = 0; y < 9; y++)
{
testText[x][y] = new JTextField();
testText[x][y].setPreferredSize(new Dimension(30, 30));
testText[x][y].setHorizontalAlignment(SwingConstants.CENTER);
testText[x][y].setFont(new Font("Tahoma", Font.BOLD, 18));
testText[x][y].setBackground(Color.WHITE);
testText[x][y].setEditable(false);
testText[x][y].addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if( //blablabla )
testText[x][y].setText(value + "");
}
});
panelMain.add(testText[x][y]);
}
我想使用x和y来获取此“单击”字段的位置,但神秘的错误提示是:
“在包围范围内定义的局部变量x必须是最终的或实际上是最终的”(与“y”相同)
在我的项目中将有检查功能,如果我能
使用x和y作为参数,例如:
checkIfPossibel(x,y,value); // "value" is global
请记住,我不是Java的上帝,如果可能的话,我希望将这项工作保持在(对于我来说)可理解的水平上。
最佳答案
最好的解决方法是简化代码-通过引入可以为final的局部变量来消除testTest[x][y]
的所有重复(从而使您可以在匿名内部类中使用它):
testText = new JTextField[9][9];
for (int x = 0; x < 9; x++) {
for (int y = 0; y < 9; y++)
{
final JTextField field = new JTextField();
testText[x][y] = field;
field.setPreferredSize(new Dimension(30, 30));
field.setHorizontalAlignment(SwingConstants.CENTER);
field.setFont(new Font("Tahoma", Font.BOLD, 18));
field.setBackground(Color.WHITE);
field.setEditable(false);
field.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (//blablabla) {
field.setText(value + "");
}
}
});
panelMain.add(field);
}
}
目前尚不清楚您是否甚至需要
testText
,但目前我假设您在其他地方引用它。
关于java - 如何在不使用 “Local variable x defined in an enclosing scope must be final…”的情况下使用数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28993553/