禁用基于另一个ComboBox项的JComboBox

时间:2012-06-21 19:29:29

标签: java swing jcombobox

所以这就是我想要做的。如果用户选择JComboBox1中的项目,我希望能够禁用JComboBox2。但只有他们选择"Unavailable"。我已经阅读了关于action listeners的内容,等等,但是我只能使用if语句: 这就是我的想法:

if (jComboBox1.getSelectedItem().equals("Unavailable") == true) {
        jComboBox2.setEnabled(false);
}

1 个答案:

答案 0 :(得分:1)

这肯定有用,但你必须定期调用那段代码。更好的方法是使用ActionListener - 它将来肯定会帮助你。您必须创建一个实现ActionListener的类,例如

//This class should be a private class inside the class which holds the JComboBoxes.
private class DisableActionListener implements ActionListener { 

    public void actionPerformed(ActionEvent e) {
        JComboBox cb = (JComboBox)e.getSource();
        if (cb.getSelectedItem().equals("Unavailable")) {
            jComboBox2.setEnabled(false);
        }
    }
}

要使其工作,您必须将ActionListener附加到第一个JComboBox - ActionListener本身并不好!为此,请在JComboBox上使用addActionListener()方法,添加此新创建的类的实例。

现在,要剖析代码:

private class DisableActionListener implements ActionListener

在这里,我们创建一个实现 ActionListener接口的类。有了这个,我们正在创建自己的ActionListener模型。实现接口时,必须覆盖所有接口的方法,因此我们必须覆盖接口上的标准actionPerformed(ActionEvent e)方法。无论何时选择或取消选择项目,都会调用此方法(将调度ActionEvent);因此,你必须在这个方法中加入你想要发生的逻辑。

JComboBox cb = (JComboBox)e.getSource();

导致调用actionPerformed()方法的每个ActionEvent都将包含额外的数据。其中一个数据是ActionEvent的来源 - 是什么让这个动作发生了?在这种情况下,我们知道源是一个JComboBox,因为我们只将ActionListener附加到JComboBox,所以我们可以将ActionEvent的源(它是一个Object)转换为发送事件的JComboBox。

其余的是你自己写的if逻辑,修复了语法错误:

你写了

(jComboBox1.getSelectedItem().equals("Unavailable") == true),

但是String上的equals()方法已经返回true,因此(== true)部分是不需要的冗余。在你的情况下,你基本上得到(true == true)。

无论如何,希望这有帮助!