2015-01-05 149 views
0

在java應用程序中,我想要一個包含多個組合框的對話框,分別爲A,B和C. A在init組件中填充,B在A中的項目被選中時填充,C填充當B填充時。我知道基本的方法,即設置一個聽衆A & B填充Item.SELECTED上的下一個框。級聯組合框java

什麼殘肢是當B項目列表的長度爲1時要做什麼。對於單個項目,不可以選擇更改,因此C不會重新填充。有人可以給我一個提示嗎?

謝謝?

埃德小號

回答

0

在樹的每一層,檢查當前的節點沒有兄弟姐妹(同父的子女)。如果是這種情況,請以編程方式觸發選擇事件並加載當前節點的子項。

+0

我該怎麼做?只有我知道的是以編程方式改變選擇,但如果只有一個項目,沒有什麼可以改變它。我錯過了什麼? –

+0

對不起,無法理解你的困難。無論如何,即使有多種選擇,你也應該處理這個問題。如果用戶選擇默認的呢? – Raffaele

+0

如果有2個或更多,我可以編程方式選擇第二個,然後選擇第一個。如果只有一個項目... –

0

如何將空項添加到B?當B選擇空項目時,C忽略選擇更改事件。

+0

想到這個,但必須有更好的方法。 –

0

已解決的問題。我的問題是假設使用DefaultComboBoxModel(rootboxitems)進行初始化會在盒子初始化時觸發項目狀態更改。它不是;所有後續的框必須在初始羣體之後和每次選擇更改之後更新。如果每個盒子的更新代碼放在一個單獨的函數中,這樣就可以重複使用,這很容易完成。

我設計的例子是根據三個屬性Make,Model和Color(例如「Ford」,「Mustang」,「Blue」)來選擇一輛汽車。每個Make可以有多個模型,每個模型都有自己的顏色列表。

對話框&初始化:

public CascadeGui(java.awt.Frame parent, boolean modal, Makes aMakes) { 
    super(parent, modal); 
    ArrayList<Make> makes; 
    Make selectedMake; 
    Model slectedModel; 
    initComponents(); 
    makes = aMakes.GetMakesArrayList(); 
    cboMakes.setModel(new javax.swing.DefaultComboBoxModel(makes.toArray(new Make[makes.size()]))); 
    selectedMake = (Make) cboMakes.getSelectedItem(); 
    cboModels.setModel(new javax.swing.DefaultComboBoxModel(selectedMake.GetModelsArray())); 
    slectedModel = (Model) cboModels.getSelectedItem(); 
    cboColors.setModel(new javax.swing.DefaultComboBoxModel(slectedModel.GetColorsArray())); 

} 

這將建立所有屬性的初始選擇。該項目使狀態改變事件處理程序是:

private void cboMakesItemStateChanged(java.awt.event.ItemEvent evt) {           
    if (evt.getStateChange() == SELECTED) { 
     UpdateModelsCbo(); 
     UpdateColorsCbo(); 
    } 
}           

正如你所看到的,製作的一個新的部分會導致在型號框中的更新,然後顏色框。模型選擇事件的相應代碼是:

private void cboModelsItemStateChanged(java.awt.event.ItemEvent evt) {           
    if (evt.getStateChange() == SELECTED) { 
     UpdateColorsCbo(); 
    } 
}           

我很樂意爲示例和/或回答問題分享Netbeans zip文件。同時,作爲一名新手Java程序員,我會很感激意見和改進建議。

埃德