写了一个ComboBox三级联动程序,如图
一栏和二栏有两个监听器:
第一栏
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent e) {
JComboBox jcb = (JComboBox) e.getSource();
ptList1 = getMunicipalList();
ptList2 = getAdminList();
int P=jcb1.getSelectedIndex();
if (jcb == jcb1) {
jcb3.removeAllItems();
p5.remove(jcb3);
jcb2.removeAllItems(); // 去除所有选项
p2.remove(jcb2);
// itemList = getNo2Lever(row);
if (P == 0) {
int i1 = 0;
itemList1 = getNo2Lever(ptList1, "00");
int n1 = itemList1.size();
itemList = new String[n1];
for (Item item : itemList1) {
itemList[i1] = item.getName();
i1++;
}
jcb2 = new JComboBox(itemList);
jcb2.setSelectedIndex(0);
jcb2.setEditable(true);
p2.add(jcb2);
border = BorderFactory.createTitledBorder(etched, "市");
// ///////////////////////
jcb3.removeAllItems(); // 去除所有选项
p5.remove(jcb3);
// itemList = getNo2Lever(row);
itemList1 = getNo3Lever(ptList1, "00", "01");
int n2 = itemList1.size();
itemList = new String[n2];
int i2 = 0;
for (Item item : itemList1) {
itemList[i2] = item.getName();
i2++;
}
jcb3 = new JComboBox(itemList);
jcb3.setEditable(true);
p5.add(jcb3);
border = BorderFactory.createTitledBorder(etched, "区");
} else if (P > 0 && P < 28) {
itemList2 = getNo1Lever(ptList2);
String Pno = itemList2.get(P - 1).getPno();
int i1 = 0;
itemList2 = getNo2Lever(ptList2, Pno);
int n1 = itemList2.size();
itemList = new String[n1];
for (Item item : itemList2) {
itemList[i1] = item.getName();
i1++;
}
jcb2 = new JComboBox(itemList);
jcb2.setSelectedIndex(0);
jcb2.setEditable(true);
p2.add(jcb2);
border = BorderFactory.createTitledBorder(etched, "市");
// ///////////////////////
jcb3.removeAllItems(); // 去除所有选项
p5.remove(jcb3);
// itemList = getNo2Lever(row);
itemList2 = getNo3Lever(ptList2, Pno, "01");
int n2 = itemList2.size();
itemList = new String[n2];
int i2 = 0;
for (Item item : itemList2) {
itemList[i2] = item.getName();
i2++;
}
jcb3 = new JComboBox(itemList);
jcb3.setEditable(true);
p5.add(jcb3);
border = BorderFactory.createTitledBorder(etched, "区");
} else {
itemList = new String[] { " " };
jcb2 = new JComboBox(itemList);
jcb3 = new JComboBox(itemList);
p2.add(jcb2);
p5.add(jcb3);
border = BorderFactory.createTitledBorder(etched, "区");
}
}
运行结果:
第二栏监听器:
ActionListener al2 = new ActionListener() {
public void actionPerformed(ActionEvent e) {
JComboBox jcb = (JComboBox) e.getSource();
ptList1 = getMunicipalList();
ptList2 = getAdminList();
if (jcb == jcb2) {
int P = jcb1.getSelectedIndex();
int C = jcb.getSelectedIndex();
jcb3.removeAllItems(); // 去除所有选项
p5.remove(jcb3);
if (jcb1.getSelectedIndex() == 0) {
itemList1 = getNo2Lever(ptList1, "00");
String Cno = itemList1.get(C).getCno();
itemList1 = getNo3Lever(ptList1, "00", Cno);
int n2 = itemList1.size();
itemList = new String[n2];
int i2 = 0;
for (Item item : itemList1) {
itemList[i2] = item.getName();
i2++;
}
jcb3 = new JComboBox(itemList);
jcb3.setEditable(true);
p5.add(jcb3);
border = BorderFactory.createTitledBorder(etched, "区");
} else {
itemList2 = getNo1Lever(ptList2);
String Pno = itemList2.get(P - 1).getPno();
itemList2 = getNo2Lever(ptList2, Pno);
String Cno = itemList2.get(C).getCno();
itemList2 = getNo3Lever(ptList2, Pno, Cno);
int n2 = itemList2.size();
itemList = new String[n2];
int i2 = 0;
for (Item item : itemList2) {
itemList[i2] = item.getName();
i2++;
}
jcb3 = new JComboBox(itemList);
jcb3.setEditable(true);
p5.add(jcb3);
border = BorderFactory.createTitledBorder(etched, "区");
}
}
}
};
运行结果:
两个都加上(jcb1.addActionListener(al);
jcb2.addActionListener(al2);)以后第二栏依然对,第一个却成这样:
请问为什么会出现这种情况,应当怎么改?