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。