在java應用程序中,我想要一個包含多個組合框的對話框,分別爲A,B和C. A在init組件中填充,B在A中的項目被選中時填充,C填充當B填充時。我知道基本的方法,即設置一個聽衆A & B填充Item.SELECTED上的下一個框。級聯組合框java
什麼殘肢是當B項目列表的長度爲1時要做什麼。對於單個項目,不可以選擇更改,因此C不會重新填充。有人可以給我一個提示嗎?
謝謝?
埃德小號
在java應用程序中,我想要一個包含多個組合框的對話框,分別爲A,B和C. A在init組件中填充,B在A中的項目被選中時填充,C填充當B填充時。我知道基本的方法,即設置一個聽衆A & B填充Item.SELECTED上的下一個框。級聯組合框java
什麼殘肢是當B項目列表的長度爲1時要做什麼。對於單個項目,不可以選擇更改,因此C不會重新填充。有人可以給我一個提示嗎?
謝謝?
埃德小號
在樹的每一層,檢查當前的節點沒有兄弟姐妹(同父的子女)。如果是這種情況,請以編程方式觸發選擇事件並加載當前節點的子項。
如何將空項添加到B?當B選擇空項目時,C忽略選擇更改事件。
想到這個,但必須有更好的方法。 –
已解決的問題。我的問題是假設使用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程序員,我會很感激意見和改進建議。
埃德
我該怎麼做?只有我知道的是以編程方式改變選擇,但如果只有一個項目,沒有什麼可以改變它。我錯過了什麼? –
對不起,無法理解你的困難。無論如何,即使有多種選擇,你也應該處理這個問題。如果用戶選擇默認的呢? – Raffaele
如果有2個或更多,我可以編程方式選擇第二個,然後選擇第一個。如果只有一個項目... –