日期:2014-05-20  浏览次数:20778 次

Java 图形用户设计 ItemLinstener 监听器问题
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.*;


public class ComboBoxDegree extends JFrame
{
  JPanel comboBoxPanel;
  JComboBox list;
  JTextArea textInfoArea;
  String degreestr="";
 
public ComboBoxDegree()
{
  JLabel labeltext=new JLabel("学历",JLabel.LEFT);
 //labeltext.setFont(new Font("Dialog",Font.PLAIN,20));
  labeltext.setFont(new Font("Dialog",Font.PLAIN,20));
 textInfoArea=new JTextArea("信息显示所显信息:");
 String []degree={"本科以下","本科","硕士","博士"};
 list=new JComboBox(degree);
 comboBoxPanel=new JPanel();
 GridLayout gridlayout=new GridLayout(1,2);
 comboBoxPanel.add(labeltext);
 comboBoxPanel.add(list);
 comboBoxPanel.add(textInfoArea);
 setLayout(gridlayout);//1 请问这个是对窗体设置吗
 add(comboBoxPanel);//请问是不是加入到窗体 add前面可以省略
 add(textInfoArea);
 list.addItemListener(new ItemListener()
 {
 public void itemStateChanged(ItemEvent e)
 {
  degreestr=(String)list.getSelectedItem();
  textInfoArea.append(degreestr);
  
  
 } 
 });

 public static void main(String args[])
 {
 
  ComboBoxDegree cbd=new ComboBoxDegree();
  
  cbd.setBounds(400,200,500,300);
  cbd.setVisible(true);
  cbd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
 } 
}
  结果为什么 单击一次 调用两次事件

------解决方案--------------------
itemStateChanged
看方法的名字也应该知道,这个事件在某条目状态变化的时候触发。
最初会触发一次,之后是两次。分别为一个item由选中变为非选中;而另一个刚好相反。
可以通过ItemEvent 的属性来判别。
e.getStateChange()
返回值为
ItemEvent.DESELECTED
或者
 ItemEvent.SELECTED
有些时候没有用处。但是某些时候可以用来得到oldvalue。