这是我的代码:
JComboBox unity=new JComboBox();
unity.setBounds(430,280,140,25);
unity.addItem("Pakistan");
unity.addItem("China");
unity.addItem("America");
unity.addItem("Japan");
unity.addItem("Bangladesh");
unity.addItem("Srilanka");
unity.addItem("India");
unity.addItem("Turkey");
unity.addItem("UK");
unity.addItem("Afghanistan");
unity.addItem("Iran");
unity.addItem("Iraq");
unity.setEditable(true);
uy.add(unity);
JLabel city=new JLabel("City:");
city.setBounds(350,320,100,25);
city.setForeground(Color.BLACK);
uy.add(city);
JComboBox cety=new JComboBox();
cety.setBounds(430,320,140,25);
cety.addItem("");
uy.add(cety);
unity.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent olala){
if(unity.getSelectedItem().equals("Pakistan")){
cety.addItem("Lahore");
cety.addItem("Islamabad");
cety.addItem("Karachi");
cety.addItem("Rawalpindi");
cety.addItem("Faisalabad");
cety.addItem("Gujjranwala");
}
}
});但是当我运行程序时,if语句的块没有做任何事情。如果我想将值加载到JComboBox中,这取决于来自另一个JComboBox的选择,我应该做什么?
发布于 2016-08-29 23:09:44
实际上,如果您先选择“中国”,然后再选择“巴基斯坦”,然后单击cety组合框的向下箭头,您将看到这些项目。
通过添加如下所示的println,您可以轻松地调试和查看何时调用该方法。
...
unity.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent olala) {
// DEBUG
System.out.println("itemStateChanged(): item = " + olala.getItem());
...您会注意到,当您选择不同的项时,将调用itemStateChanged。如果您第一次启动程序并看到组合框,它们还没有改变状态,方法还没有被调用,而且cety是空的。可以通过添加以下方法使unity更改状态
unity.setSelectedIndex(1);
unity.setSelectedIndex(0);在你的代码末尾。或者,您只需将所有unity.addItem行移到addItemListener之后,以便将第一项添加到列表中将触发事件。
在添加新项之前,您需要清除这些项,否则在unity中选择几个项将导致cety中的长列表。如果您需要列表中的空字符串,您也需要将该语句移到这里,
...
public void itemStateChanged(ItemEvent olala){
cety.removeAllItems();
cety.addItem("");
if (unity.getSelectedItem().equals("Pakistan")) {
cety.addItem("Lahore");
...然后可以使用switch而不是大量的if语句,从事件中获取条目而不是unity,并去掉原始类型:
JComboBox<String> unity = new JComboBox<>();
unity.setBounds(430, 280, 140, 25);
unity.setEditable(true);
uy.add(unity);
JLabel city = new JLabel("City:");
city.setBounds(350, 320, 100, 25);
city.setForeground(Color.BLACK);
uy.add(city);
JComboBox<String> cety = new JComboBox<>();
cety.setBounds(430, 320, 140, 25);
uy.add(cety);
unity.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent event) {
cety.removeAllItems();
cety.addItem("");
switch (event.getItem().toString()) {
case "Pakistan":
cety.addItem("Lahore");
cety.addItem("Islamabad");
cety.addItem("Karachi");
cety.addItem("Rawalpindi");
cety.addItem("Faisalabad");
cety.addItem("Gujjranwala");
break;
case "China":
cety.addItem("Beijing");
break;
// ...
}
}
});
unity.addItem("Pakistan");
unity.addItem("China");
unity.addItem("America");
unity.addItem("Japan");
unity.addItem("Bangladesh");
unity.addItem("Srilanka");
unity.addItem("India");
unity.addItem("Turkey");
unity.addItem("UK");
unity.addItem("Afghanistan");
unity.addItem("Iran");
unity.addItem("Iraq");
// This would be a workaround if you don't want to move the addItems:
// unity.setSelectedIndex(1);
// unity.setSelectedIndex(0);https://stackoverflow.com/questions/39210623
复制相似问题