如何在ActionListener的actionPerformed [Java]

时间:2016-12-19 10:46:33

标签: java loops variables action

我想知道是否有办法使用循环分配点击事件。 我正在寻找的简单例子: 每个按钮将在myMethod(int)内执行操作。

所以button[2]应该myMethod(2)等等。

// imports...    
public class MyClass {

        private JButton[] buttons = new JButton[10];

        public MyClass() {
            // constructor

            for ( int i = 0; i < this.buttons.length; i++ ) {
             this.buttons[i].addActionListener( new ActionListener() {
                    public void actionPerformed( ActionEvent e ) {                  
                        MyClass.this.myMethod(i);
                    }
                });
            }
        }

        public void myMethod( int id ) {
            // perform actions
            //...
        }



    }

上面的代码抛出错误,该变量必须是最终的或有效的最终。我知道为什么,但我怎么能做类似的事呢?

1 个答案:

答案 0 :(得分:3)

只需创建临时最终变量并为其指定i值。现在,您可以使用final变量将其传递给myMethod,如下所示:

// imports...    
public class MyClass {

    private JButton[] buttons = new JButton[10];

    public MyClass() {
        // constructor

        for (int i = 0; i < this.buttons.length; i++) {
            final int myFinalIndex = i;
            this.buttons[i].addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    MyClass.this.myMethod(myFinalIndex);
                }
            });
        }
    }

    public void myMethod(int id) {
        // perform actions
        // ...
    }

}