Java jcheckbox上的actionListener

Java jcheckbox上的actionListener,java,swing,actionlistener,jcheckbox,anonymous-inner-class,Java,Swing,Actionlistener,Jcheckbox,Anonymous Inner Class,我试图将匿名actionListener添加到JCheckBox中,但在访问要更新值的对象时遇到一些困难。我不断地发现关于非最终版本的错误,然后当我将它们更改为最终版本时,它会抱怨其他事情。 我试图做的如下(我删除了一些gui代码,使其更易于阅读): (FunctionDataObject fdo:wdo.getFunctionDataList())的 { JLabel inputTypesLabel=新的JLabel(“输入类型:”); inputsBox.add(inputTypesLabe

我试图将匿名actionListener添加到JCheckBox中,但在访问要更新值的对象时遇到一些困难。我不断地发现关于非最终版本的错误,然后当我将它们更改为最终版本时,它会抱怨其他事情。
我试图做的如下(我删除了一些gui代码,使其更易于阅读):

(FunctionDataObject fdo:wdo.getFunctionDataList())的

{
JLabel inputTypesLabel=新的JLabel(“输入类型:”);
inputsBox.add(inputTypesLabel);
对于(int i=0;i
从更新您的代码

 inputTypeComboBox.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) 
         {
             fdo.getInputTypes().set(i, (String) inputTypeComboBox.getSelectedItem());
         }
    });

链接解释了为什么只能访问内部类中的最终变量

从更新代码

 inputTypeComboBox.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) 
         {
             fdo.getInputTypes().set(i, (String) inputTypeComboBox.getSelectedItem());
         }
    });


链接解释了为什么您只能访问内部类中的最终变量

您不能访问匿名类中的非最终变量。您可以稍微修改代码以绕过该限制(我已制作了
fdo
inputTypeComboBox
最终版本,并且还制作了
I
的最终副本):

for(final FunctionDataObject fdo:wdo.getFunctionDataList()){
JLabel inputTypesLabel=新的JLabel(“输入类型:”);
inputsBox.add(inputTypesLabel);
对于(int i=0;i
您无法访问匿名类中的非最终变量。您可以稍微修改代码以绕过该限制(我已制作了
fdo
inputTypeComboBox
最终版本,并且还制作了
I
的最终副本):

for(final FunctionDataObject fdo:wdo.getFunctionDataList()){
JLabel inputTypesLabel=新的JLabel(“输入类型:”);
inputsBox.add(inputTypesLabel);
对于(int i=0;i
这将起作用:

    for (final FunctionDataObject fdo : wdo.getFunctionDataList()) {
        JLabel inputTypesLabel = new JLabel("Input Types: ");
        inputsBox.add(inputTypesLabel);
        for (int i = 0; i < fdo.getNumberOfInputs(); i++) {
            JLabel inputLabel = new JLabel(fdo.getInputNames().get(i));
            final JComboBox inputTypeComboBox = new JComboBox(getTypes());
            final int index = i;
            inputTypeComboBox.addActionListener(new ActionListener() {
                 public void actionPerformed(ActionEvent e) {
                     fdo.getInputTypes().set(index, (String) inputTypeComboBox.getSelectedItem());
                 }
            });
         }
    }    
for(final FunctionDataObject fdo:wdo.getFunctionDataList()){
JLabel inputTypesLabel=新的JLabel(“输入类型:”);
inputsBox.add(inputTypesLabel);
对于(int i=0;i
这将起作用:

    for (final FunctionDataObject fdo : wdo.getFunctionDataList()) {
        JLabel inputTypesLabel = new JLabel("Input Types: ");
        inputsBox.add(inputTypesLabel);
        for (int i = 0; i < fdo.getNumberOfInputs(); i++) {
            JLabel inputLabel = new JLabel(fdo.getInputNames().get(i));
            final JComboBox inputTypeComboBox = new JComboBox(getTypes());
            final int index = i;
            inputTypeComboBox.addActionListener(new ActionListener() {
                 public void actionPerformed(ActionEvent e) {
                     fdo.getInputTypes().set(index, (String) inputTypeComboBox.getSelectedItem());
                 }
            });
         }
    }    
for(final FunctionDataObject fdo:wdo.getFunctionDataList()){
JLabel inputTypesLabel=新的JLabel(“输入类型:”);
inputsBox.add(inputTypesLabel);
对于(int i=0;i
我认为问题隐藏在未呈现的代码中,为了获得更好的帮助,越早发布,代码概念中可能存在错误,而不是如何为匿名侦听器设置最终指标我认为问题隐藏在未呈现的代码中,为了获得更好的帮助,越早发布,代码概念中可能存在错误,不知道如何为匿名侦听器设置最终指示符
    for (final FunctionDataObject fdo : wdo.getFunctionDataList()) {
        JLabel inputTypesLabel = new JLabel("Input Types: ");
        inputsBox.add(inputTypesLabel);
        for (int i = 0; i < fdo.getNumberOfInputs(); i++) {
            JLabel inputLabel = new JLabel(fdo.getInputNames().get(i));
            final JComboBox inputTypeComboBox = new JComboBox(getTypes());
            final int index = i;
            inputTypeComboBox.addActionListener(new ActionListener() {
                 public void actionPerformed(ActionEvent e) {
                     fdo.getInputTypes().set(index, (String) inputTypeComboBox.getSelectedItem());
                 }
            });
         }
    }