这肯定会工作,但你必须定期调用这段代码。使用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();
每个的ActionEvent这导致actionPerformed()方法被调用将包含额外的数据。数据中的一部分是ActionEvent的来源 - 发生这种行为的原因是什么?在这种情况下,我们知道源是JComboBox,因为我们仅将ActionListener附加到JComboBox,因此我们可以将ActionEvent的源代码(它是Object)强制转换为发送该事件的JComboBox。
的其余部分是,如果逻辑分析,你自己写,有语法错误固定:
你写
(jComboBox1.getSelectedItem().equals("Unavailable") == true),
但equals()方法的字符串已返回true,所以(= = true)部分是不必要的冗余。在你的情况下,你基本上得到(true == true)。
无论如何,希望这有助于!