package day11;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class ItemTest {
private JFrame jf;
private JComboBox box1,box2;
private JLabel label1,label2;
private Object[] obj1;//省份
private Object[][] obj2;//城市

public ItemTest(Object[] obj1,Object[][] obj2){
this.obj1=obj1;
this.obj2=obj2;
jf=new JFrame("Item Event Test");
box1=new JComboBox(obj1);
box2=new JComboBox(obj2[0]);
label1=new JLabel("省份:");
label2=new JLabel("城市:");
jf.setLayout(new FlowLayout());
jf.add(label1);
jf.add(box1);
jf.add(label2);
jf.add(box2);
addEventHandler();
}

public void addEventHandler(){
box1.addItemListener(new ItemListener(){
                public void itemStateChanged(ItemEvent arg0) {
int index= box1.getSelectedIndex();
box2.removeAllItems();

for(int i=0;i<obj2[index].length;i++){
box2.addItem(obj2[index][i]);
}

}

});
}

public void showMe(){
jf.setSize(400,300);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args){
Object[] obj1=new Object[]{"河北","河南","江苏","山东","辽宁"};
Object[][] obj2=new Object[][]{
{"石家庄","保定","廊坊","邯郸","秦皇岛"},
{"郑州","许昌","洛阳","南阳","开封","驻马店"},
{"济南","青岛","烟台","威海","泰安","潍坊"},
{"南京","苏州","徐州","扬州","无锡"},
{"沈阳","大连","锦州","铁岭","辽阳","丹东"}
};
new ItemTest(obj1,obj2).showMe();
}}
构造方法中box2=new JComboBox(obj2[0]);把box2初始化了
我把addEventHandler方法中for(int i=0;i<obj2[index].length;i++){
box2.addItem(obj2[index][i]);
}
换成box2=new JComboBox(obj2[index]);为啥就不好使了呢??
憋死我这个新手了!求解!

解决方案 »

  1.   

    index有值吗 应该是一个正整数才行啊
      

  2.   

    int index= box1.getSelectedIndex(); 
    index有值的呀
      

  3.   

    public void addEventHandler() {
    box1.addItemListener(new ItemListener() {
    public void itemStateChanged(ItemEvent arg0) {
    int index = box1.getSelectedIndex();
    ItemTest.this.jf.doLayout();
    ItemTest.this.jf.remove(box2);
    ItemTest.this.jf.repaint();

    box2 = new JComboBox(obj2[index]);
    ItemTest.this.jf.add(box2);
    ItemTest.this.jf.doLayout();
    ItemTest.this.jf.validate();
    } });
    }
      

  4.   

    ItemTest.this.jf.doLayout();
    这句可能可以去掉的。
    你的布局做的不好,应该固定combox的宽度。现在这样,位置一直不固定。
      

  5.   

    谢谢!能给我讲解一下为什么我把addEventHandler方法中for(int i=0;i <obj2[index].length;i++){ 
    box2.addItem(obj2[index][i]); 

    换成box2=new JComboBox(obj2[index]);就不行吗?
      

  6.   

    可能跟java的垃圾回收一样。box2正在使用中,所以不能赋值。