2 raspberrymonster RaspberryMonster 于 2015.07.13 10:48 提问

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

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

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

3个回答

tongyi55555
tongyi55555   2015.07.13 11: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);
            }
        });
    }
}
u012401478
u012401478   2015.07.13 11:00

combox有个选中完毕更新的事件

RaspberryMonster
RaspberryMonster 是叫啥
2 年多之前 回复
tongyi55555
tongyi55555   2015.07.13 11:04

不是太明白你的要求,知道你有两个JComboBox下拉框,点击第一个下拉框后选中某一项之后,需要第二个下拉框做什么呢?是添加、删除还是完全修改里面的内容?

RaspberryMonster
RaspberryMonster 比如第一个下拉框选择班级,第二个下拉框就自动更新此班级有课表的学期
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片