JComboBox中添加适当的监听器

AA1153476373 2011-06-22 08:57:41
如果专业的选择取决于学院的选择,当选择的学院不同相应的专业下拉项的内容也要改变,急需,请高手们速速回帖!!!!多谢
...全文
1201 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
minitt30 2013-01-28
  • 打赏
  • 举报
回复
路过,收藏了
米谷 2013-01-16
  • 打赏
  • 举报
回复
谢谢,正在找这个点。
小灯枫叶 2011-06-24
  • 打赏
  • 举报
回复
真给力
AA1153476373 2011-06-22
  • 打赏
  • 举报
回复
谢谢啦 很具体
24K純帥 2011-06-22
  • 打赏
  • 举报
回复
恩,onchange()事件
kai27ks 2011-06-22
  • 打赏
  • 举报
回复
在OnChanage事件里写啊。。
茫茫大海 2011-06-22
  • 打赏
  • 举报
回复

import java.awt.BorderLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;


public class MainFrame extends JFrame implements ItemListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private JComboBox college;
private JComboBox major;
private Map<Integer, Vector<String>> map = new HashMap<Integer, Vector<String>>();

public MainFrame() {
Vector<String> collegeItems = new Vector<String>();
collegeItems.add("物信学院");
collegeItems.add("数统学院");
collegeItems.add("文史学院");
college = new JComboBox(collegeItems);
college.addItemListener(this);

//物信学院的专业
Vector<String> vector0 = new Vector<String>();
vector0.add("物理");
vector0.add("计算机");
vector0.add("电信");
map.put(0, vector0);

//数统学院的专业
Vector<String> vector1 = new Vector<String>();
vector1.add("应用数学");
vector1.add("统计学");
vector1.add("理论数学");
map.put(1, vector1);

//文史学院的专业
Vector<String> vector2 = new Vector<String>();
vector2.add("汉语言文学");
vector2.add("历史");
vector2.add("戏剧文学");
map.put(2, vector2);


major = new JComboBox(new DefaultComboBoxModel(map.get(0)));
major.addItemListener(this);
JPanel panel = new JPanel();
panel.add(college);
panel.add(major);

this.add(panel, BorderLayout.NORTH);
this.setTitle("JComboBox示例");
this.setSize(800,600);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public void itemStateChanged(ItemEvent e) {
//在JComboBox的监听事件时总是执行两次,原因如下:
//ItemListener类中的方法itemStateChanged()事件的itemState有关,itemState在这里的状态有两个,Selected 和 deSelected(即选中和未被选中)
//所以,当改变下拉列表中被选中的项的时候,其实是触发了两次事件:
//第一次是上次被选中的项的 State 由 Selected 变为 deSelected ,即取消选择
//第二次是本次被选中的项的 State 由 deSelected 变为 Selected ,即新选中,所以,必然的 ItemStateChanged 事件中的代码要被执行两次了。
//加上最外面的if语句,就可以解决这个问题。
if(e.getStateChange() == ItemEvent.SELECTED) {
if(e.getSource() == college) {
int index = college.getSelectedIndex();
major.setModel(new DefaultComboBoxModel(map.get(index)));
} else if(e.getSource() == major) {
JOptionPane.showMessageDialog(this, "你选择的是:" + college.getSelectedItem() + "的" + major.getSelectedItem() + "专业!");
}
}
}

public static void main(String[] args) {
new MainFrame();
}
}
AA1153476373 2011-06-22
  • 打赏
  • 举报
回复
onchange是什么 有没有具体的代码啊?
chenchenyangll 2011-06-22
  • 打赏
  • 举报
回复
我也水一个

OnChange...
horse_leo_zhcn 2011-06-22
  • 打赏
  • 举报
回复
接口ItemListener

覆写OnChanage事件
huntor 2011-06-22
  • 打赏
  • 举报
回复
addItemListener

62,633

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧