南屏山敲钟人
2015-07-13 02:48
采纳率: 0%
浏览 3.3k
已采纳

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

现在能够实现用更新另一Jcombox的内容,但是每次更新就会自动触发点击事件,就会报错
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0

现在用的是ItemListener 之前用鼠标点击事件不会报错,但是并不是点击下拉框,选中项后才跳出结果,不是我想要的效果,求解!

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

3条回答 默认 最新

  • JonsonJiao 2015-07-13 03:59
    最佳回答

    这是个简单的例子,主要监听的是第一个下拉框中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);
                }
            });
        }
    }
    
    评论
    解决 无用
    打赏 举报
查看更多回答(2条)

相关推荐 更多相似问题