在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个或更多,我可以编程方式选择第二个,然后选择第一个。如果只有一个项目... –