java - 如何在不使用 “Local variable x defined in an enclosing scope must be final…”的情况下使用数组索引

标签 java swing error-handling scope jtextfield

我正在编写一个简单的程序,但是有一个我无法解决的问题。

我正在使用这样的循环创建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/

相关文章:

java - asp.net 是否像 java 服务器平台一样容易受到对象序列化的影响

java - 如何在Java中构建类似QGraphicsView的组件

python - 处理数据库断开连接

java - log4j v2 格式化功能

Java:纪元日期为 MM/DD/YYYY

java - 带有换行符和制表符的 TextLayout

java - 不安全如何重构重复代码

java - 构造函数可以抛出运行时异常吗?

php - 意外的T_FUNCTION错误

java - 有没有办法将Java代码编译成DLL?