没有为JComboBox触发Actionperformed

时间:2011-01-27 10:21:07

标签: java swing jcombobox actionlistener

我有一个ActionListener附加到JComboBox(不可编辑)。一旦选择了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 个答案:

答案 0 :(得分: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(...);

答案 1 :(得分:0)

好像你第一个条件有点不对。

如果您想在JComboBox中没有项目时执行某些代码,则应检查内容大小:jComboBox.getItemCount()==0而不是jComboBox.getSelectedIndex()==-1,因为所选索引可能取决于各种条件,而getItemCount()当组合框为空时,只有0: - )