2012-06-21 36 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)。

無論如何,希望這有助於!

相關問題