這肯定會工作,但你必須定期調用這段代碼。使用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)。
無論如何,希望這有助於!