Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在操作侦听器中使用for循环变量_Java_For Loop - Fatal编程技术网

Java 如何在操作侦听器中使用for循环变量

Java 如何在操作侦听器中使用for循环变量,java,for-loop,Java,For Loop,我正试图使用for循环为jButtons生成和添加actionlistener,以及一些奇特的数组编辑和随机数组抓取 这使用了一些自定义函数(所有这些函数都起作用) 在尝试编译时,我遇到了错误 Main.java:127: error: local variables referenced from an inner class must be final or effectively final gen+= data[i][i2][0]+": "+ran(data[i][i2])+"\n\n"

我正试图使用for循环为jButtons生成和添加actionlistener,以及一些奇特的数组编辑和随机数组抓取

这使用了一些自定义函数(所有这些函数都起作用)

在尝试编译时,我遇到了错误

Main.java:127: error: local variables referenced from an inner class must be final or effectively final
gen+= data[i][i2][0]+": "+ran(data[i][i2])+"\n\n";
           ^

本质上,我需要的是一种让action listener知道int I值的方法,或者只知道[I][[]是什么数据(每个按钮都不同)

您可以将
ActionListener
作为一个类从外部提取如下内容:

private static class MyActionListener implements ActionListener {

        private int i;

        MyActionListener(int i) {
            this.i = i;
        }

        @Override
        public void actionPerformed(ActionEvent actionEvent) {

        }
    }

现在,当您将actionListener添加到按钮时,实例化这个类,并在构造函数中传递i的值。执行的
操作的逻辑保持不变。添加
actionListener
时,只需执行以下操作:
newGenButton.addActionListener(newmyactionlistener(i))

解决了这个问题,抛出了一个错误,int我不能是私有的,所以我将其更改为公共的,效果非常好,谢谢you@Aspwilenson欢迎
Main.java:127: error: local variables referenced from an inner class must be final or effectively final
gen+= data[i][i2][0]+": "+ran(data[i][i2])+"\n\n";
           ^
private static class MyActionListener implements ActionListener {

        private int i;

        MyActionListener(int i) {
            this.i = i;
        }

        @Override
        public void actionPerformed(ActionEvent actionEvent) {

        }
    }