2015-01-05 80 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程序员,我会很感激意见和改进建议。

埃德