所以这就是我想要做的。如果用户选择JComboBox1
中的项目,我希望能够禁用JComboBox2
。但只有他们选择"Unavailable"
。我已经阅读了关于action listeners
的内容,等等,但是我只能使用if语句:
这就是我的想法:
if (jComboBox1.getSelectedItem().equals("Unavailable") == true) {
jComboBox2.setEnabled(false);
}
答案 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)。
无论如何,希望这有帮助!