Java 需要帮助访问循环的内部类中的变量吗

Java 需要帮助访问循环的内部类中的变量吗,java,swing,netbeans,miglayout,Java,Swing,Netbeans,Miglayout,我在访问内部类中的变量int I时遇到问题 代码: 列选择面板上的公共类{ JFrame-JFrame; 摩根大通银行; //JPanel jPanel1; //JTextField-JTextField; //JButton JButton; //JComboBox JComboBox[]; 布局; MIG布局框架布局; //列名 ColumnNames cn=新ColumnNames(); List listedColumnNames=cn.getColumnNames(); String

我在访问内部类中的变量int I时遇到问题 代码:

列选择面板上的公共类{
JFrame-JFrame;
摩根大通银行;
//JPanel jPanel1;
//JTextField-JTextField;
//JButton JButton;
//JComboBox JComboBox[];
布局;
MIG布局框架布局;
//列名
ColumnNames cn=新ColumnNames();
List listedColumnNames=cn.getColumnNames();
String columnNames[]=listedColumnNames.toArray(新字符串[0]);
公共OnColumnSelectPanel(int n){
//jPanel1=新的JPanel();
jFrame=新jFrame(“创建柱结构”);
//mainJPanel=新的JPanel();
布局=新的MIG布局(“flowy”,“中心]相对[增长],“[]10[]”;
frameLayout=new MigLayout(“flowx”、“[center]rel[grow]”、“[]10[]”;
//mainJPanel.setLayout(新的BoxLayout(mainJPanel,BoxLayout.X_轴));
//MigLayout mainJPanelLayout=新的MigLayout(“流动的”、“相对增长的”、“5[]”);
//声明并初始化数组
JPanel JPanel[]=新的JPanel[n];
JComboBox JComboBox[]=新JComboBox[n];
JButton JButton[]=新JButton[n];
最终整数=0;
对于(int i=0;ii
由循环修改,因此它实际上不是最终的

解决方案如下所示:

for (int i = 0; i < n; i++) {
   ...

  final int effectivelyFinal = i;
  jButton[i].addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent ae) {
      ...
      // use effectivelyFinal instead of i
    });
}
class MyListener implements ActionListener {

    private final int index;

    // add more fields for other required parameters

    public MyListener(int index) {
        this.index = index;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
      // use index    
    }
}
用法:

jButton[i].addActionListener(new MyListener(i));

1) 为了更快地获得更好的帮助,请发布一个or。2)所有小写字母输入的单词都很难阅读,就像试图听某人喃喃自语一样。请在句子开头使用大写字母作为单词I,并使用专有名称,如
ArrayList
或Oracle。将匿名类拆分为内部类-将所有需要的信息传递给它,以便执行要求红色任务(因为我无法理解到底发生了什么)此外,考虑使用一个自定义组件,它在内部维护所有需要的信息,而不是一组断开的ARRAYSI,我真的很抱歉这种坏格式。我很忙。我下次会处理这个问题。非常抱歉!只是为了信息。有效的最终变量不等于“i”,因为“i”。在内部类中不可访问,因此第一个解决方案实际上不是解决方案。我说的对吗?不,您必须使用
有效地最终
而不是
i
内部
执行的操作(…)
但是
effectivelyFinal
变量不能用于循环。对吗?是的,因为它是final,所以不能在循环中修改
jButton[i].addActionListener(new MyListener(i));