开发者社区> 问答> 正文

java如何用一个JcomboxBox的选择更新另一JcomboBox的item且不触发其点击事件?

现在能够实现用更新另一Jcombox的内容,但是每次更新就会自动触发点击事件,就会报错
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
现在用的是ItemListener 之前用鼠标点击事件不会报错,但是并不是点击下拉框,选中项后才跳出结果,不是我想要的效果,求解!

展开
收起
蛮大人123 2016-03-13 17:12:33 2933 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    这是个简单的例子,主要监听的是第一个下拉框中item的选中事件,可以实现你要的功能。

    import java.awt.Container;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import javax.swing.ComboBoxModel;
    import javax.swing.DefaultComboBoxModel;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    public class JComboBoxDemo extends JFrame {
        private static final long serialVersionUID = 7927383326842864540L;
        private JComboBox jcb2;
        private ComboBoxModel aModel1 = new DefaultComboBoxModel(new String[] {
                "张三", "李四", "王五" });
        private ComboBoxModel aModel2 = new DefaultComboBoxModel(new String[] {
                "春", "夏", "秋", "冬" });
        private ComboBoxModel aModel3 = new DefaultComboBoxModel(new String[] {
                "广州", "北京", "上海" });
        JComboBoxDemo() {
            Container contentpane = getContentPane();
            JPanel panel = new JPanel();
            final JComboBox jcb1 = new JComboBox(new Integer[] { 1, 2, 3 });
            panel.add(jcb1);
            jcb2 = new JComboBox(aModel1);
            panel.add(jcb2);
            jcb1.addItemListener(new ItemListener() {
                @Override
                public void itemStateChanged(ItemEvent e) {
                    if (e.getStateChange() == ItemEvent.SELECTED) {
                        System.out.println(jcb1.getSelectedItem());
                        // 更新jcb2中的内容
                        if ((Integer) jcb1.getSelectedItem() == 1) {
                            jcb2.setModel(aModel1);
                        } else if ((Integer) jcb1.getSelectedItem() == 2) {
                            jcb2.setModel(aModel2);
                        } else if ((Integer) jcb1.getSelectedItem() == 3) {
                            jcb2.setModel(aModel3);
                        }
                    }
                }
            });
            contentpane.add(panel);
        }
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    JComboBoxDemo jcbDemo = new JComboBoxDemo();
                    jcbDemo.setSize(400, 300);
                    jcbDemo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    jcbDemo.setLocationRelativeTo(null);
                    jcbDemo.setVisible(true);
                }
            });
        }
    }
    2019-07-17 19:02:54
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载