一个JTextField的数组, 循环的为每个JTextField添加事件private JTextField[][] jt = new JTextField[4][4];
for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
        jpText.add(jt[i][j]);
                
        jt[i][j].addKeyListener(new KeyListener() {        public void keyPressed(KeyEvent keyevent) {
    
        }        public void keyReleased(KeyEvent keyevent) {
            // String s = jt[i][j].getText();
        }        public void keyTyped(KeyEvent keyevent) {
                                            
        }
        });
    }
}现在注释的那句话有错误, 意思说:"在内部类中不能引用一个非final的变量"
那我应该怎么改我的语句呢?

解决方案 »

  1.   

    KeyListener不要以匿名内部类的方式进行添加
      

  2.   

    为何不把事件和 new JTextField[][]分开写呢
      

  3.   

    你要这样做的话
    private JTextField[][] jt = new JTextField[4][4];//全局变量 public void test() {
    for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
    // jpText.add(jt[i][j]);
    final JTextField jtf = jt[i][j];//声明为final型
    jt[i][j].addKeyListener(new KeyListener() { public void keyPressed(KeyEvent keyevent) { } public void keyReleased(KeyEvent keyevent) {
     String s = jtf.getText();
    } public void keyTyped(KeyEvent keyevent) { }
    });
    }
    }
    }
    照楼上两位所说的话比较好,你想参考我可以给你思路
      

  4.   

    你的意思是自己写个类实现KeyListener接口, 再把这个类传进去
    Class MyKeyListener implements KeyListener{
        //实现KeyListener的方法
        ......
    }
    MyKeyListener mkl = new MyKeyListener();
    jt[i][j].addKeyListener(mkl);