这当然可以,但是您必须定期调用那段代码。更好的是使用 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,因此我们可以将作为 Object 的 ActionEvent 的源转换为发送事件的 JComboBox。
剩下的就是你自己写的 if 逻辑,修正了语法错误:
你写了
(jComboBox1.getSelectedItem().equals("Unavailable") == true),
但是 String 上的 equals() 方法已经返回 true,因此 (== true) 部分是不需要的冗余。在您的情况下,您基本上得到(true == true)。
无论如何,希望这会有所帮助!