mittwyc 2017-11-07 12:33 采纳率: 0%
浏览 996

【java】ComboBox的两个ActionListener问题

写了一个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);)以后第二栏依然对,第一个却成这样:
图片说明
请问为什么会出现这种情况,应当怎么改?

  • 写回答

1条回答 默认 最新

  • mittwyc 2017-11-07 12:39
    关注

    就是分别单独运行可以,合在一起却有错

    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置