如题。
//      三级联动
String[] oi ={"集团","学校"};
final String[][] oii = {
{"软件公司","生物科技公司"},
{"广东海洋大学","广东海洋寸金学院"}
};
final String[][][] oiii = {
{  {"分析组","开发组","测试组"},{"生产部","销售部"}  },
{  {"行政机构","教学机构","科研机构","后勤机构"},{"政教处","后勤处"}  }
}; // 一级机构下拉框
cb_orgI = new JComboBox(oi);
cb_orgI.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
               if(e.getSource().equals(cb_orgI)){
                cb_orgII.removeAllItems();
                int selected = cb_orgI.getSelectedIndex();
                for(String value:oii[selected]){
                cb_orgII.addItem(value);
                }
               }
}
});
cb_orgI.setBounds(111, 80, 112, 18);
getContentPane().add(cb_orgI);

// 二级分类下拉框
cb_orgII = new JComboBox(oii[0]);
cb_orgII.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
  int i=0,j = 0;
  if(e.getSource().equals(cb_orgII)){
  cb_orgIII.removeAllItems();
  }
  Object selected1 = cb_orgII.getSelectedItem();
  if(selected1.equals("软件公司")){
  i=0;
  j=0;
  }
  if(selected1.equals("生物科技公司")){
  i=0;
  j=1;
  }
  if(selected1.equals("广东海洋大学")){
  i=1;
  j=0;
  }
  if(selected1.equals("广东海洋寸金学院")){
  i=1;
  j=1;
  }
              for(String value:oiii[i][j]){
                cb_orgIII.addItem(value);
              }
}
});

cb_orgII.setBounds(343, 80, 112, 18);
getContentPane().add(cb_orgII);

// 三级机构下拉框
cb_orgIII = new JComboBox(oiii[0]);
cb_orgIII.setBounds(585, 80, 217, 18);
getContentPane().add(cb_orgIII);

解决方案 »

  1.   

    两个地方改一下
    1.在下面加个判断
    Object selected1 = cb_orgII.getSelectedItem();
    if(selected1 ==null)
    {
        return;
    }

    2.三级下拉框初始化应该是
    cb_orgIII = new JComboBox(oiii[0][0]);
      

  2.   

    1.普通切换的话用ActionListener就可以了,不用ItemListener,用的话也没问题,但有时item改变会执行两次,这个注意就行了。
    2.因为你removeAllItems的时候也会引起Items的改变,所以也会触发监听器,而remove后已经是null了,这时你还去用控件的getSelectedItem()方法,当然就会引起空指针异常了,所以你要时时注意监听器的触发条件。
    3.你的布局管理要设成FlowLayout,要不然控件被挤在一起,第三个显示不出来。
    4.我给你写了一个简单,没怎么用循环,你参考一下吧
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;public class JM extends JFrame
    {
     JComboBox cb1 , cb2 , cb3;
     String[] s1 = {"集团" , "学校"};;
     String[] s11 = {"第一集团" , "第二集团"};
     String[] s111 = {"集集集"};
     String[] s112 = {"团团团"}; String[] s21 = {"第一学校" , "第二学校"};
     String[] s211 = {"学学学" , "校校校"};
     String[] s212 = {"学校学校学校"}; public JM()
     {
     cb1 = new JComboBox();
     cb2 = new JComboBox();
     cb3 = new JComboBox(); for(String x : s1)
     {
     cb1.addItem(x);
     }
     for(String x : s11)
     {
     cb2.addItem(x);
     }
     for(String x : s111)
     {
     cb3.addItem(x);
     } cb1.addActionListener(new ActionListener(){
     public void actionPerformed(ActionEvent ie)
     {
     String[] insertArray = null; if(cb1.getSelectedItem().equals("集团"))
     {
    cb2.removeAllItems();
     insertArray = s11; }
     if(cb1.getSelectedItem().equals("学校"))
     {
    cb2.removeAllItems();
     insertArray = s21; }
     for(String x : insertArray)
     {
     cb2.addItem(x);
     }
     }
     });
     cb2.addActionListener(new ActionListener(){
     public void actionPerformed(ActionEvent ie)
     {
     String[] insertArray = null; if(cb2.getSelectedItem() != null)
     {
     if(cb2.getSelectedItem().equals("第一集团"))
     {
    cb3.removeAllItems();
     insertArray = s111; }
     if(cb2.getSelectedItem().equals("第二集团"))
     {
    cb3.removeAllItems();
     insertArray = s112; }
     if(cb2.getSelectedItem().equals("第一学校"))
     {
    cb3.removeAllItems();
     insertArray = s211; 
    }
     if(cb2.getSelectedItem().equals("第二学校"))
     {
    cb3.removeAllItems();
     insertArray = s212; }
     for(String x : insertArray)
     {
     cb3.addItem(x);
     }
     }
     }
     }); setLayout(new FlowLayout());
     add(cb1);
     add(cb2);
     add(cb3); setSize(600,300);
     setLocation(100,100);
     setVisible(true);
     } public static void main(String[] args)
     {
     new JM();
     }
    }