我刚才给你做了以下测试,没有问题的。
JComboBox c = new JComboBox();
class itemChangedClass implements ItemListener{
public void itemStateChanged(ItemEvent e){
System.out.println(e);
}
}
c.addItemListener(new itemChangedClass());
改变一次结果如下:
---------------------------------------------------------------------
java.awt.event.ItemEvent[ITEM_STATE_CHANGED,item=Ebullient,stateChange=DESELECTED] on javax.swing.JComboBox[,204,5,97x27,layout=javax.swing.plaf.metal.MetalComboBoxUI$MetalComboBoxLayoutManager,alignmentX=null,alignmentY=null,border=,flags=328,maximumSize=,minimumSize=,preferredSize=,isEditable=false,lightWeightPopupEnabled=true,maximumRowCount=8,selectedItemReminder=Ebullient]java.awt.event.ItemEvent[ITEM_STATE_CHANGED,item=Recalcitrant,stateChange=SELECTED] on javax.swing.JComboBox[,204,5,97x27,layout=javax.swing.plaf.metal.MetalComboBoxUI$MetalComboBoxLayoutManager,alignmentX=null,alignmentY=null,border=,flags=328,maximumSize=,minimumSize=,preferredSize=,isEditable=false,lightWeightPopupEnabled=true,maximumRowCount=8,selectedItemReminder=Recalcitrant]也就是说,你改变一次,产生了两个事件:取消选择原来的item,选择现在的item
。
BTW:你为什么不用addActionListener,这样的话,选中一个就会产生一个事件,可以获取被选中的item,多好!
JComboBox c = new JComboBox();
class itemChangedClass implements ItemListener{
public void itemStateChanged(ItemEvent e){
System.out.println(e);
}
}
c.addItemListener(new itemChangedClass());
改变一次结果如下:
---------------------------------------------------------------------
java.awt.event.ItemEvent[ITEM_STATE_CHANGED,item=Ebullient,stateChange=DESELECTED] on javax.swing.JComboBox[,204,5,97x27,layout=javax.swing.plaf.metal.MetalComboBoxUI$MetalComboBoxLayoutManager,alignmentX=null,alignmentY=null,border=,flags=328,maximumSize=,minimumSize=,preferredSize=,isEditable=false,lightWeightPopupEnabled=true,maximumRowCount=8,selectedItemReminder=Ebullient]java.awt.event.ItemEvent[ITEM_STATE_CHANGED,item=Recalcitrant,stateChange=SELECTED] on javax.swing.JComboBox[,204,5,97x27,layout=javax.swing.plaf.metal.MetalComboBoxUI$MetalComboBoxLayoutManager,alignmentX=null,alignmentY=null,border=,flags=328,maximumSize=,minimumSize=,preferredSize=,isEditable=false,lightWeightPopupEnabled=true,maximumRowCount=8,selectedItemReminder=Recalcitrant]也就是说,你改变一次,产生了两个事件:取消选择原来的item,选择现在的item
。
BTW:你为什么不用addActionListener,这样的话,选中一个就会产生一个事件,可以获取被选中的item,多好!
解决方案 »
- java写Socket与C++写的Socket之间的通讯的问题。(顶者有分)
- 一个java难题
- java编程思想第四版中文版完整版下载!
- 线程和swing的问题?
- dom4j解析问题!(牛人帮忙啊 !在线等!)selectSingleNode报错!
- JProbe Console 能否监视CPU
- notify和notifyAll为什么在sychronized(this)时,效果一样???
- 关于设定包的问题
- java的中文显示问题
- vC中的listBox在java中是哪个控件??
- java如何连接局域网内的另一台机器上access数据库 getConnection()方法如何写?
- 构造器中有很多参数,并且用户在初始化时有很多种情况,详情见内.
{
JComboBox combSspx = new JComboBox();
int countBss = 1; private void jbInit() throws Exception
{
combSspx.addItemListener(new dlgPxxx_combSspx_itemAdapter(this));
} void combSspx_itemStateChanged(ItemEvent e)
{
System.out.println(intCount);
intCount++;
}
}class dlgPxxx_combSspx_itemAdapter implements java.awt.event.ItemListener {
dlgPxxx adaptee; dlgPxxx_combSspx_itemAdapter(dlgPxxx adaptee) {
this.adaptee = adaptee;
}
public void itemStateChanged(ItemEvent e) {
adaptee.combSspx_itemStateChanged(e);
}
}
{
public void itemStateChanged(ItemEvent event)
{
if (event.getStateChange() == ItemEvent.SELECTED)
{} if(event.getStateChange() == ItemEvent.DESELECTED)
{}
}
});
上面的就是为什么你单击时会出现两次的原因了
那为什么有的选项我选择时,ItemStateChanged事件只执行一次?有的选项还导致事件被执行了四次?这具体又是怎么回事呢?怎么解释呢?高手们!
为什么用JCombobox的itemstateChanged事件处理起来这么麻烦,你们一般都用这个事件吗?
还是换别的listener,我就觉得actionlistener处理起来就比itemlistener好,因为它始终就执行一遍,你说呢?高手们?
if (e.getStateChange() == ItemEvent.SELECTED)
if (e.getStateChange() == ItemEvent.Unselected)
combobox.addItemListener(this);
...
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
label.setVisible(true);
...
} else {
label.setVisible(false);
}
}