0

所以这就是我想要做的。如果用户在 中选择一个项目JComboBox1,我希望能够禁用JComboBox2. 但只有当他们选择"Unavailable". 我已经阅读了action listeners诸如此类的东西,但是有没有一种方法可以让我像 if 语句一样使用:这是我的想法:

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

1 回答 1

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,因此我们可以将作为 Object 的 ActionEvent 的源转换为发送事件的 JComboBox。

剩下的就是你自己写的 if 逻辑,修正了语法错误:

你写了

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

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

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

于 2012-06-21T19:53:55.883 回答