首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据来自另一个JComboBox的选择将值加载到JComboBox中?

如何根据来自另一个JComboBox的选择将值加载到JComboBox中?
EN

Stack Overflow用户
提问于 2016-08-29 16:09:31
回答 1查看 110关注 0票数 1

这是我的代码:

代码语言:javascript
复制
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的选择,我应该做什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-29 23:09:44

实际上,如果您先选择“中国”,然后再选择“巴基斯坦”,然后单击cety组合框的向下箭头,您将看到这些项目。

通过添加如下所示的println,您可以轻松地调试和查看何时调用该方法。

代码语言:javascript
复制
        ...
        unity.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent olala) {
// DEBUG
System.out.println("itemStateChanged(): item = " + olala.getItem());
            ...

您会注意到,当您选择不同的项时,将调用itemStateChanged。如果您第一次启动程序并看到组合框,它们还没有改变状态,方法还没有被调用,而且cety是空的。可以通过添加以下方法使unity更改状态

代码语言:javascript
复制
        unity.setSelectedIndex(1);
        unity.setSelectedIndex(0);

在你的代码末尾。或者,您只需将所有unity.addItem行移到addItemListener之后,以便将第一项添加到列表中将触发事件。

在添加新项之前,您需要清除这些项,否则在unity中选择几个项将导致cety中的长列表。如果您需要列表中的空字符串,您也需要将该语句移到这里,

代码语言:javascript
复制
            ...
        public void itemStateChanged(ItemEvent olala){
            cety.removeAllItems();
            cety.addItem("");
            if (unity.getSelectedItem().equals("Pakistan")) {
                cety.addItem("Lahore");
                ...

然后可以使用switch而不是大量的if语句,从事件中获取条目而不是unity,并去掉原始类型:

代码语言:javascript
复制
    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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39210623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档