java - 如何在 ActionListener 的 actionPerformed 中传递 for 循环索引 [Java]

标签 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
            //...
        }



    }

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

最佳答案

只需创建临时最终变量并为其分配 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
        // ...
    }

}

关于java - 如何在 ActionListener 的 actionPerformed 中传递 for 循环索引 [Java],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41220857/

相关文章:

variables - PHP - if 语句和 while 循环内的变量范围

java - Plantuml 停止使用新版本的 Java 1.7.0.21

HTML5 Canvas 线图,用户在其中输入数据

jQuery 变量不隐藏

php - 带大括号的循环会导致错误的输出

计算字符的出现次数并将其打印出来

iphone - 打印出变量名

java - 使用java通过usb/RS232转换器发送数据

java - 无法对非静态方法进行静态引用 (Android getApplicationContext())

java - 如何使用 socket.io 发送二进制数据?