2012-06-27 60 views
0

我正在處理一個程序,其中2個JComboBoxes必須設置對方的 所選項目。讓我們複製他們的對象名稱wheelsTypeCombo和carBrandCombo。 它們的模型都包含從數據庫(第一個列表中的類型1的對象和第二個列表中的類型2的對象)檢索到的每個對象的列表,以及相應類型的特殊wheelsTypeShowAll和carBrandShowAll。當選擇最後2個項目中的任何一個時,則顯示兩個JComboBox中包含的所有項目,包括它們自己(2個特殊項目)。互惠影響JComboBoxes

的JComboBoxes互惠關係的規則如下:

  1. 當我們選擇wheelsTypeCombo一個項目,該carBrandCombo重新裝載 所有使用的汽車品牌只有那些類型的輪胎和carBrandShowAll的項目
  2. 當carBrandShowAll項目從第一種情況狀態選擇CarBrandCombo 然後CarBrandCombo將重新加載數據庫中的所有相應項目, wheelTypeCombo也有選定項目wheelsTypeShowAll。
  3. 當我們選擇carBrandCombo那麼相應的車輪類型的項目在wheelsTypeCombo選擇 項目
  4. 如果已經在一個對應關係項目被選中,那麼不需要setSelectedItem 採取行動要麼JComboBoxes

我暫時嘗試使用匿名ItemListener類,當我將JComboBoxes添加到接口時,卻發現自己可能會因調用方法調用而導致堆棧和空指針異常溢出。

我希望在任何級別上進行任何合理的改進。

+2

爲更好地幫助發佈[SSCCE](http://sscce.org/) – mKorbel

+1

另請參閱此[示例](http://stackoverflow.com/a/3191882/230513)。 – trashgod

回答

1

如果我要做到這一點,我創建了兩個自定義類,carBrand和wheelsType,然後讓他們每個人實現getUsers調用,它返回是相關的項目自身內部列表:

public carBrand 
    public static Enum allWheels 
    List<wheelsType> myWheels; 
    getWheels() { 
     return myWheels; 
    } 
    setWheels(); 

public wheelsType 
    public static Enum allBrands 
    List<carBrands> myBrands; 
    getBrands(); 
    setBrands(); 

然後在你的組合框代碼,握住你的車輪和品牌的列表,然後用

getSelected().getBrands() 

getSelected().getWheels(). 
0123的結果更新的ListModel

然後,您也可以靜態調用getAllBrands()或任何其他選項來選擇您的「全部」選項。

有可能是'更簡單'的方法,比如爲每個方法制作一個Map,但我認爲這將是最「清晰」的方式。