级联组合框java

级联组合框java,java,combobox,cascade,Java,Combobox,Cascade,在java应用程序中,我需要一个带有多个组合框的对话框,如a、B和C。a在init组件中填充,B在选择a中的项目时填充,C在填充B时填充。我知道基本方法,即为a&B设置一个侦听器,填充Item.SELECTED上的下一个框 让我感到困惑的是,当B项列表的长度为1时,该怎么办。对于单个项目,不可能更改选择,因此不会重新填充C。有人能给我一个提示吗 谢谢 在树的每个级别,检查当前节点是否没有兄弟节点(同一父节点的子节点)。如果是这种情况,则以编程方式触发选择事件并加载当前节点的子节点。将空项添加到B

在java应用程序中,我需要一个带有多个组合框的对话框,如a、B和C。a在init组件中填充,B在选择a中的项目时填充,C在填充B时填充。我知道基本方法,即为a&B设置一个侦听器,填充Item.SELECTED上的下一个框

让我感到困惑的是,当B项列表的长度为1时,该怎么办。对于单个项目,不可能更改选择,因此不会重新填充C。有人能给我一个提示吗

谢谢


在树的每个级别,检查当前节点是否没有兄弟节点(同一父节点的子节点)。如果是这种情况,则以编程方式触发选择事件并加载当前节点的子节点。

将空项添加到B如何?当B选择空项时,C忽略选择更改事件。

问题已解决。我的问题是假设使用DefaultComboxModel(rootboxitems)初始化时会触发项状态更改。它没有;在初始填充和每次选择更改后,必须更新所有后续框。如果将每个框的更新代码放在一个单独的函数中以便可以重用,那么很容易做到这一点

我设计的例子是根据品牌、型号和颜色这三个属性选择汽车,例如“福特”、“野马”、“蓝色”。每个品牌可以有几个型号,每个型号都有自己的颜色列表

对话框和初始化为:

    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()));

}
如您所见,Make的新部分将更新Models框,然后更新Colors框。模型选择事件的相应代码为:

    private void cboModelsItemStateChanged(java.awt.event.ItemEvent evt) {                                           
    if (evt.getStateChange() == SELECTED) {
        UpdateColorsCbo();
    }
}                                          
我将很高兴与大家分享Netbeans zip文件中的示例和/或回答问题。同时,作为一名Java程序员新手,我希望您能提出一些改进意见和建议


Ed

我该怎么做?我知道的唯一方法是以编程方式更改选择,但如果只有一个项,则无需对其进行任何更改。我错过了什么?对不起,我不能理解你的困难。无论如何,你应该处理这个问题,即使有多种选择。如果用户选择默认的一个怎么办?如果有两个或更多,我可以通过编程选择第二个,然后选择第一个。如果只有一项……为什么要这样做?要么您有一个默认值,要么您允许空选择,但必须有更好的方法。
    private void cboModelsItemStateChanged(java.awt.event.ItemEvent evt) {                                           
    if (evt.getStateChange() == SELECTED) {
        UpdateColorsCbo();
    }
}