当前位置:编程学习 > C/C++ >>

NetBeans IDE 6.8 JAVA Swing控件三级联动下拉列表怎么写?

我现在还在学习初级阶段,很多地方还不懂,现在做到两个下拉列表的联动,但是不知道怎么写第三个。

 

就是做一个学生信息注册表,系部,专业,班级三个下拉列表,现在做好了系部和专业两个下拉列表,到班级的时候就卡住了。

记得答的简单些,我还不太懂,现在还没连上数据库,我用的是if和else写的联动,代码都是写死了的。

希望懂的亲能够解答一下怎么写三级联动。

追问:                       

    private void departComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {                                               
        // TODO add your handling code here:

 

//三级联动就是从这里开始的,上面还有很多代码,因为字数太多,所以把上面的删掉了

//我JAVA编程很菜,我现在只会写一点点最基本的,还没连上数据库,所以请你也用这个简单的界面制作方法帮我解决下,我不知道怎么加入第三个下拉列表
        String depart = this.departComboBox.getSelectedItem().toString();
        if (depart.equals("请选择院系")) {
            this.majorComboBox.removeAllItems();
            this.majorComboBox.addItem("请选择专业");
            this.classComboBox.removeAllItems();
            this.classComboBox.addItem("请选择班级");
           
        }else if(depart.equals("软件学院")){
            this.majorComboBox.removeAllItems();
            this.majorComboBox.addItem("请选择专业");
            this.majorComboBox.addItem("软件技术");
            this.majorComboBox.addItem("动漫设计");
            this.majorComboBox.addItem("计算机应用技术");
            this.majorComboBox.addItem("电子商务");


        } else if (depart.equals("艺术学院")) {
            this.majorComboBox.removeAllItems();
            this.majorComboBox.addItem("请选择专业");
            this.majorComboBox.addItem("室内设计");
            this.majorComboBox.addItem("电脑艺术设计");
            this.majorComboBox.addItem("音乐表演");
            this.majorComboBox.addItem("舞蹈表演");


        } else if (depart.equals("机电工程系")) {
            this.majorComboBox.removeAllItems();
            this.majorComboBox.addItem("请选择专业");
            this.majorComboBox.addItem("机电一体化");
            this.majorComboBox.addItem("数控技术");
            this.majorComboBox.addItem("玩具设计与制造");
            this.majorComboBox.addItem("模具设计");


        } else if (depart.equals("轻化工程系")) {
            this.majorComboBox.removeAllItems();
            this.majorComboBox.addItem("请选择专业");
            this.majorComboBox.addItem("产品造型设计");
            this.majorComboBox.addItem("生化制药技术");
            this.majorComboBox.addItem("高分子材料应用技术");
            this.majorComboBox.addItem("模具设计");
        }

    }                                              

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new AddStudentView().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                    
    private javax.swing.ButtonGroup SexBtnGroup;
    private javax.swing.JLabel SexLabel;
    private javax.swing.JButton addBtn;
    private javax.swing.JTextField ageIput;
    private javax.swing.JLabel ageLabel;
    private javax.swing.JComboBox classComboBox;
    private javax.swing.JLabel classLabel;
    private javax.swing.JButton clearBtn;
    private javax.swing.JComboBox departComboBox;
    private javax.swing.JLabel departLabel;
    private javax.swing.JButton exitBtn;
    private javax.swing.JTextArea homeIput;
    private javax.swing.JLabel homeLabel;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JComboBox majorComboBox;
    private javax.swing.JLabel majorLabel;
    private javax.swing.JRadioButton manRBtn;
    private javax.swing.JTextField nameInput;
    private javax.swing.JLabel nameLable;
    private javax.swing.JTextField pidIput;
    private javax.swing.JLabel pidLabel;
    private javax.swing.JTextField snInput;
    private javax.swing.JLabel snLable;
    private javax.swing.JTextField telIput;
    private javax.swing.JLabel telLabel;
    private javax.swing.JRadioButton womanRBtn;
    // End of variables declaration                  
}

答案:用else if不行啊,数据库里如果“系部”有30几个,难道你一个个写过去吗?

可以用for循环,把系部加入第一个列表

然后 对该列表添加监听器 addActionListener

 通过该列表.getSelectedItem得到选中的项

 

然后专业可以写一个类。里面有一个属性是“系部”  当那些个专业的系部属性为 第一个列表中的值的时候

把那些专业的“专业名”属性加入第二个列表中

 

依次类推

我给你一个关于省份,城市,和营业网点的3级下拉列表的例子,你稍微修改就可以了


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

 

@SuppressWarnings("serial")
public class Test extends JFrame{
 
 private  List<String> provinces=new ArrayList<String>();
 private List<City> citys=new ArrayList<City>();
 private  List<Branch> branchs=new ArrayList<Branch>();
 private JComboBox provinceBox=new JComboBox();
 private JComboBox cityBox=new JComboBox();
 private JComboBox branchBox=new JComboBox();
 public Test() {
  init();
  initData();
  setBox();
  addHandler();
 }
 public void init(){//初始化GUI界面
  JPanel panel=new JPanel();
  this.add(panel);
  //panel.setLayout(new GridLayout(3,2));
  panel.add(new JLabel("省份:"));
  panel.add(provinceBox);
  panel.add(new JLabel("城市:"));
  panel.add(cityBox);
  panel.add(new JLabel("营业网点"));
  panel.add(branchBox);
  
 }
 private void initData(){//初始化省份 城市和营业网点  这些数据实际上应该从数据库里查询
  provinces.add("浙江");
  provinces.add("广西");
  citys.add(new City("浙江","宁波"));
  citys.add(new City("浙江","金华"));
  citys.add(new City("广西","桂林"));
  citys.add(new City("广西","南宁"));
  branchs.add(new Branch("浙江","宁波", "宁波镇海网点"));
  branchs.add(new Branch("浙江","宁波", "宁波北仑网点"));
  branchs.add(new Branch("浙江","金华", "金华网点1"));
  branchs.add(new Branch("浙江","金华", "金华网点2"));
  branchs.add(new Branch("广西","桂林", "桂林网点1"));
  branchs.add(new Branch("广西","桂林", "桂林网点2"));
  branchs.add(new Branch("广西","南宁", "南宁网点1"));
  branchs.add(new Branch("广西","南宁", "南宁网点2"));  
 }
 private void setBox(){//设置下拉列表里的值
  //设置先在各项列表里加入的值
  provinceBox.removeAllItems();
  cityBox.removeAllItems();
  branchBox.removeAllItems();
  provinceBox.addItem("所有");
  cityBox.addItem("所有");
  branchBox.addItem("所有");
  for (int i = 0; i < provinces.size(); i++) {
   provinceBox.addItem(provinces.get(i));
   
  }
  for (int i = 0; i < citys.size(); i++) {
   
   cityBox.addItem(citys.get(i).getCity());
  }
  for (int i = 0; i < branchs.size(); i++) {
   branchBox.addItem(branchs.get(i).getBranch());
  }
  
 }
 private void addHandler(){//设置3个下拉列表的级联关系
  provinceBox.addActionListener(new ActionListener() {
   //监听province下拉列表
   @Override
   public void actionPerformed(ActionEvent e) {
    cityBox.removeAllItems();
    cityBox.addItem("所有");
    branchBox.removeAllItems();
    branchBox.addItem("所有");
    String province=provinceBox.getSelectedItem().toString();//得到当前点中的值
    //在city下拉列表中 遍历citys,如果citys[i]的省份属性和它相同则添加进去,其中要考虑是所有的特殊情况
    if(province.equals("所有")){
     for (int i = 0; i < citys.size(); i++) {
      cityBox.addItem(citys.get(i).getCity());
      
     }
    }else{
     for (int i = 0; i < citys.size(); i++) {
      if(citys.get(i).getProvince().equals(province)){
       cityBox.addItem(citys.get(i).getCity());
      }
      
     }
    }
    //在branch下拉列表中 遍历branchs,如果branchs[i]的省份属性和它相同则添加进去,其中要考虑是所有的特殊情况
    if(province.equals("所有")){
     for (int i = 0; i < branchs.size(); i++) {
      branchBox.addItem(branchs.get(i).getBranch());
      
     }
    }else{
     for (int i = 0; i < branchs.size(); i++) {
      if(branchs.get(i).getProvince().equals(province)){
       branchBox.addItem(branchs.get(i).getBranch());
      }
      
     }
    }
   }
  });
  //监听cityBox下拉列表
  cityBox.addActionListener(new ActionListener() {
   
   @Override
   public void actionPerformed(ActionEvent e) {
    branchBox.removeAllItems();
    branchBox.addItem("所有");
    if(cityBox.getSelectedItem()==null){
     return ;
    }
     String city=cityBox.getSelectedItem().toString();//得到当前点中的值
     if(city.equals("所有")){//如果是所有,则看省份框中是什么值
     if(provinceBox.getSelectedItem().equals("所有")){
      for (int i = 0; i < branchs.size(); i++) {
       branchBox.addItem(branchs.get(i).getBranch());
       
      }
     }else{
      for (int i = 0; i < branchs.size(); i++) {
       if(branchs.get(i).getProvince().equals(provinceBox.getSelectedItem())){
        branchBox.addItem(branchs.get(i).getBranch());
       }
       
      }
     }
     }else{
      for (int i = 0; i < branchs.size(); i++) {
       if(city.equals(branchs.get(i).getCity())){
        branchBox.addItem(branchs.get(i).getBranch());
       }
       
     }
     }
    
   }

上一个:谁帮我说明下java中一些术语的意义
下一个:请给以下java猜数字代码加一个对话框版本的

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,