java - JComboBox Action 监听器

标签 java swing jcombobox actionlistener

我遇到了这个问题。 我有多个 JComboBoxes(总共 5 个)。

我为每个组合框添加了一个 ActionListener,但它们都使用相同的 ActionListener,称为:

ComboBoxActionPerformed(java.awt.event.ActionEvent e)

当执行该操作时,我查看事件 (e) 并执行:

JComboBox c = ((JComboBox)e.getSource());
//DO WORK relating to c as thats the combobox that triggered.

但问题是当我在我的任何组合框中更改某些内容时,操作总是由我附加 Action 列表器的最后一个组合框触发。

有人知道吗?

然后我切换到 ItemListner。 这就是我在做的事

class MyActionListner implements ItemListener 
{
    //STUFF
        @Override
        public void itemStateChanged(ItemEvent evt) 
        {
            //DO STUFF
    }
}

public JComboBox createCombo()
{
    JComboBox box = new JComboBox();
        box.setModel(new javax.swing.DefaultComboBoxModel(new String[] 
                { "val1", "val2","val3" }));
        RulesActionListner actionL = new RulesActionListner();
        box.addItemListener(actionL);
return box;
}

并且 createCombo 被多次调用 但无论在我的 ItemStateChanged 方法中更改了哪个组合框项目 来自最后创建的组合框

createCombo 在运行时被调用,所以我有可变数量的组合框。

最佳答案

添加单独的 Action 监听器,而不是让一个 Action 监听器为每个调用运行 if 语句。该部分代码的逻辑很可能存在导致选择最后一个组合框的错误。 (可能是 else 语句,应该是 else if 等)。

将其分离出来会更加面向对象,并且从长远来看会更加灵活。

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

相关文章:

java - “Actual or formal argument lists differs in length”

java - Hibernate 显示来自 JComboBox 的记录

java - arraylist 可以用返回 arraylist 的方法初始化吗?

java - 带有 Spring REST 服务的 LazyInitializationException

java - 如何清空一个float类型的变量

java - Spring REST服务,注册用户,身份验证

java - 在 Swing 中禁用按键重复

java - 如何检测单击 Java 应用程序的系统托盘图标?

java - 删除 JComboBox 中的突出显示

java - JComboBox + JPA