级联组合框java

时间:2015-01-05 23:30:32

标签: java combobox cascade

在java应用程序中,我想要一个带有几个组合框的对话框,如A,B和C.在init组件中填充A,在选择A中的项目时填充B,在填充B时填充C 。我知道基本的方法,即为A& amp建立一个听众。 B填充Item.SELECTED上的下一个框。

当B项目列表的长度为1时,我该怎么做。单个项目不能进行选择更改,因此C不会重新填充。有人可以给我一个暗示吗?

感谢?

Ed S

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

问题解决了。我的问题是假设使用DefaultComboBoxModel(rootboxitems)进行初始化会在初始化框时触发项状态更改。它不是;必须在初始填充后和每次选择更改后更新所有后续框。如果每个盒子的更新代码都放在一个单独的函数中,那么就可以很容易地重复使用它。

我设计的例子是基于制造,模型和颜色三个属性选择汽车,例如"福特","野马","蓝&# 34 ;.每个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();
    }
}                                         

如您所见,Make的新部分将导致更新“模型”框,然后更新“颜色”框。模型选择事件的相应代码是:

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

我很乐意分享Netbeans zip文件以获取示例和/或回答问题。同时,作为Java程序员的新手,我将非常感谢您提出改进意见和建议。