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

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条)

报告相同问题?

悬赏问题

  • ¥20 5037端口被adb自己占了
  • ¥15 python:excel数据写入多个对应word文档
  • ¥60 全一数分解素因子和素数循环节位数
  • ¥15 ffmpeg如何安装到虚拟环境
  • ¥188 寻找能做王者评分提取的
  • ¥15 matlab用simulink求解一个二阶微分方程,要求截图
  • ¥30 乘子法解约束最优化问题的matlab代码文件,最好有matlab代码文件
  • ¥15 写论文,需要数据支撑
  • ¥15 identifier of an instance of 类 was altered from xx to xx错误
  • ¥100 反编译微信小游戏求指导