java - jcheckbox 上的 Action 监听器

标签 java swing actionlistener jcheckbox anonymous-inner-class

我正在尝试向 JCheckBox 添加匿名 actionListener,但在访问我想要更新值的对象时遇到一些困难。我不断收到有关非最终的错误,然后当我将它们更改为最终时,它会提示其他事情。
我想做的如下(我删除了一些 gui 代码以使其更易于阅读):

for (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));
        JComboBox inputTypeComboBox = new JComboBox(getTypes());
        inputTypeComboBox.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) 
             {
                 fdo.getInputTypes().set(i, (String) inputTypeComboBox.getSelectedItem());
             }
        });
     }
}    

最佳答案

您无法访问匿名类中的非最终变量。您可以稍微修改代码来解决该限制(我已将 fdoinputTypeComboBox 最终化,并且还制作了 i 的最终副本>):

    for (final FunctionDataObject fdo : wdo.getFunctionDataList()) {
        JLabel inputTypesLabel = new JLabel("Input Types: ");
        inputsBox.add(inputTypesLabel);
        for (int i = 0; i < fdo.getNumberOfInputs(); i++) {
            final int final_i = i;
            JLabel inputLabel = new JLabel(fdo.getInputNames().get(i));
            final JComboBox inputTypeComboBox = new JComboBox(getTypes());
            inputTypeComboBox.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    fdo.getInputTypes().set(final_i, (String) inputTypeComboBox.getSelectedItem());
                }
            });
        }
    }

关于java - jcheckbox 上的 Action 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12598607/

相关文章:

java - 使用 Guice 优化注册表

java - Android-写入文件会产生随机字符

java - 我如何覆盖外部存储android中保存的图像

java - JFrame 的 keylistener 和 actionlistener

java - 遍历多级 JTree 的所有节点

JButton 上的 Java Actionlistener 没有名称?

java - 使用 ActionListener 交换网格中的两个图标

jsf - 为什么我能够绑定(bind) <f :actionListener> to an arbitrary method if it's not supported by JSF?

java - 在没有 Proxy 类的情况下使用方面注入(inject) InvocationHandlers

java - JPanel 上的 JInternal 框架