2011-01-27 136 views
1

我有一个ActionListener附加到JComboBox(uneditable)。一旦选择了JComboBox中的项目,我必须使框架中的下一个按钮可见。ActionCommand not triggered for JComboBox

代码的骨架看起来像这样:

public void actionPerformed(ActionEvent evt) 
{ 
    if(evt.getSource()==jComboBox){ 
     if(jComboBox.getSelectedIndex()==-1) 
      //Display an alert message 

     else{ 
      nextButton.setVisible(true); 
     //Do other actions 
     } 
    } 
} 

据发现的actionPerformed仅当第二,第三,第四(等)的项目被选择调用。但是当第一次选择第一个项目时,不会调用actionPerformed。但是,如果在选择其他项目后选择第一个项目,则会调用actioPerformed并且代码正常工作。

此错误出现在某些系统上,而不在其他系统上。任何帮助在这方面将不胜感激。

在此先感谢!

回答

2

这是正常的行为。当您重新选择相同的项目时,ActionEvent不会被触发。如果你想在创建组合框,然后你的代码应该是这样被解雇事件:

JComboBox comboBox = new JComboBox(...); 
comboBox.setSelectedIndex(-1); // remove automatic selection of first item 
comboBox.addActionListener(...); 
comboBox.setSelectedIndex(0); 

JComboBox comboBox = new JComboBox(); 
comboBox.addActionListener(...); 
comboBox.addItem(...); 
comboBox.addItem(...); 
+0

comboBox.setSelectedIndex(-1)的伎俩!谢谢 – 2011-01-28 04:35:56

0

看起来像你的第一个条件是有点不对。

如果你想,如果没有项目在您的JComboBox执行某些代码,你应该检查内容大小:jComboBox.getItemCount()==0代替jComboBox.getSelectedIndex()==-1,因为选择的索引可以根据各种条件,而getItemCount()仅仅是0的时候,好了,组合框为空:-)