2012-06-21 34 views
0

因此,我正在尝试执行此操作。如果用户在JComboBox1中选择一个项目,我希望能够禁用JComboBox2。但只有当他们选择"Unavailable"。我看过的东西有关action listeners等等,但有只是对我来说,使用像if语句的方法: 这是我的想法是:禁用基于另一个ComboBox项目的JComboBox

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

回答

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(); 

每个的ActionEvent这导致actionPerformed()方法被调用将包含额外的数据。数据中的一部分是ActionEvent的来源 - 发生这种行为的原因是什么?在这种情况下,我们知道源是JComboBox,因为我们仅将ActionListener附加到JComboBox,因此我们可以将ActionEvent的源代码(它是Object)强制转换为发送该事件的JComboBox。

的其余部分是,如果逻辑分析,你自己写,有语法错误固定:

你写

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

但equals()方法的字符串已返回true,所以(= = true)部分是不必要的冗余。在你的情况下,你基本上得到(true == true)。

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

相关问题