现在能够实现用更新另一Jcombox的内容,但是每次更新就会自动触发点击事件,就会报错
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
现在用的是ItemListener 之前用鼠标点击事件不会报错,但是并不是点击下拉框,选中项后才跳出结果,不是我想要的效果,求解!
现在能够实现用更新另一Jcombox的内容,但是每次更新就会自动触发点击事件,就会报错
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
现在用的是ItemListener 之前用鼠标点击事件不会报错,但是并不是点击下拉框,选中项后才跳出结果,不是我想要的效果,求解!
这是个简单的例子,主要监听的是第一个下拉框中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);
}
});
}
}