java如何知道要使用的索引

时间:2013-07-14 22:14:28

标签: java events jbutton actionlistener

我有一个简单的问题,下面的代码如何知道按下了什么索引,让我感到困惑的是它通过for循环为每个按钮添加了一个actionlistener,但是当我按下一个按钮时,程序怎么知道索引是否是1或5,因为索引只等于for循环当前索引(如果这没有意义让我知道,idk如何使这个问题正常工作)

private void buttonEvtListeners(){
    for(int i=0;i<6;i++){
        final int index = i;
        comp.buttons1[i].addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                if(index < 3){
                    System.out.println("Save button index: " + index);
                }else{
                    System.out.println("Panel Save button index: " + index);
                }
            }
        });
        comp.buttons2[i].addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                if(index < 3){
                    System.out.println("Default button index: " + index);
                }else{
                    System.out.println("Panel Default button index: " + index);
                }
            }
        });
        comp.buttons3[i].addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                if(index < 3){
                    System.out.println("Undo button index: " + index);
                }else{
                    System.out.println("Panel Undo button index: " + index);
                }
            }
        });
    }
}

1 个答案:

答案 0 :(得分:4)

匿名类会获取他们使用的字段的副本。如果有this,他们甚至会复制this$0。 (默认情况下调用final)如果使用调试器或反射,则可以看到这些值。它们隐式传递给类的构造函数并进入最终字段。它可以访问的字段必须是{{1}}才能简化使用。在Java 8中,闭包可以访问实际上是最终的字段,即它们可以是最终的。