Java 如何根据从另一个JComboBox中选择的内容将值加载到JComboBox中?
这是我的密码:Java 如何根据从另一个JComboBox中选择的内容将值加载到JComboBox中?,java,ms-access,dependencies,jcombobox,Java,Ms Access,Dependencies,Jcombobox,这是我的密码: 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("Indi
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
,我应该怎么做 实际上,如果您先选择“中国”,然后再选择“巴基斯坦”,然后单击cety
组合框的向下箭头,您将看到这些项目
通过添加println
这样的
...
unity.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent olala) {
// DEBUG
System.out.println("itemStateChanged(): item = " + olala.getItem());
...
您会注意到,当您选择其他项目时,会调用itemStateChanged
。如果启动程序并第一次看到组合框,则它们的状态尚未更改,方法尚未调用,并且cety
为空。您可以通过添加
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");
...
然后,您可以使用开关
而不是大量的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);
JComboBox unity=newjcombobox();
团结.挫折(430280 140 25);
unity.setEditable(true);
添加(统一);
JLabel city=新JLabel(“城市:”);
城市。挫折(35032010025);
城市。设置前景(颜色。黑色);
uy.add(城市);
JComboBox cety=新的JComboBox();
cety.立根(430、320、140、25);
加上(cety);
unity.addItemListener(新的ItemListener(){
@凌驾
公共无效itemStateChanged(ItemEvent事件){
cety.removeAllItems();
其他补充条款(“”);
开关(event.getItem().toString()){
“巴基斯坦”案:
cety.addItem(“拉合尔”);
cety.addItem(“伊斯兰堡”);
cety.addItem(“卡拉奇”);
cety.addItem(“拉瓦尔品第”);
其他事项(“费萨拉巴德”);
cety.addItem(“Gujjranwala”);
打破
案例“中国”:
cety.addItem(“北京”);
打破
// ...
}
}
});
unity.addItem(“巴基斯坦”);
unity.addItem(“中国”);
unity.addItem(“美国”);
unity.addItem(“日本”);
unity.addItem(“孟加拉国”);
unity.addItem(“斯里兰卡”);
unity.addItem(“印度”);
unity.addItem(“土耳其”);
unity.addItem(“英国”);
unity.addItem(“阿富汗”);
unity.addItem(“伊朗”);
unity.addItem(“伊拉克”);
//如果您不想移动附加项,这将是一个解决方法:
//统一。设置选定的索引(1);
//统一。设置选定的索引(0);
实际上,如果您先选择“中国”,然后再选择“巴基斯坦”,然后单击cety
组合框的向下箭头,您将看到这些项目
通过添加println
这样的
...
unity.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent olala) {
// DEBUG
System.out.println("itemStateChanged(): item = " + olala.getItem());
...
您会注意到,当您选择其他项目时,会调用itemStateChanged
。如果启动程序并第一次看到组合框,则它们的状态尚未更改,方法尚未调用,并且cety
为空。您可以通过添加
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");
...
然后,您可以使用开关
而不是大量的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);
JComboBox unity=newjcombobox();
团结.挫折(430280 140 25);
unity.setEditable(true);
添加(统一);
JLabel city=新JLabel(“城市:”);
城市。挫折(35032010025);
城市。设置前景(颜色。黑色);
uy.add(城市);
JComboBox cety=新的JComboBox();
cety.立根(430、320、140、25);
加上(cety);
unity.addItemListener(新的ItemListener(){
@凌驾
公共无效itemStateChanged(ItemEvent事件){
cety.removeAllItems();
其他补充条款(“”);
开关(event.getItem().toString()){
“巴基斯坦”案:
cety.addItem(“拉合尔”);
cety.addItem(“伊斯兰堡”);
cety.addItem(“卡拉奇”);
cety.addItem(“拉瓦尔品第”);
其他事项(“费萨拉巴德”);
cety.addItem(“Gujjranwala”);
打破
案例“中国”:
cety.addItem(“北京”);
打破
// ...
}
}
});
unity.addItem(“巴基斯坦”);
unity.addItem(“中国”);
unity.addItem(“美国”);
unity.addItem(“日本”);
unity.addItem(“孟加拉国”);
unity.addItem(“斯里兰卡”);
unity.addItem(“印度”);
unity.addItem(“土耳其”);
unity.addItem(“英国”);
unity.addItem(“阿富汗”);
unity.addItem(“伊朗”);
unity.addItem(“伊拉克”);
//如果您不想移动附加项,这将是一个解决方法:
//统一。设置选定的索引(1);
//统一。设置选定的索引(0);
删除分号if(unity.getSelectedItem().equal