这是我的代码:
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
,我该怎么办?
答案 0 :(得分:0)
实际上,如果您首先选择“中国”,然后再选择“巴基斯坦”,并点击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);