在java应用程序中,我想要一个带有几个组合框的对话框,如A,B和C.在init组件中填充A,在选择A中的项目时填充B,在填充B时填充C 。我知道基本的方法,即为A& amp建立一个听众。 B填充Item.SELECTED上的下一个框。
当B项目列表的长度为1时,我该怎么做。单个项目不能进行选择更改,因此C不会重新填充。有人可以给我一个暗示吗?
感谢?
Ed S
答案 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程序员的新手,我将非常感谢您提出改进意见和建议。
版