【问题标题】:Actionperformed not triggered for JComboBox未为 JComboBox 触发 Actionperformed
【发布时间】:2011-01-27 10:21:06
【问题描述】:

我有一个附加到 JComboBox(不可编辑)的 ActionListener。一旦选择了 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 并且代码可以正常工作。

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

提前致谢!!

【问题讨论】:

    标签: java swing jcombobox actionlistener


    【解决方案1】:

    这是正常行为。当您重新选择同一项目时,不会触发 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(...);
    

    【讨论】:

      【解决方案2】:

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

      如果你想在你的 JComboBox 中没有项目的情况下执行某些代码,你应该检查内容大小:jComboBox.getItemCount()==0 而不是jComboBox.getSelectedIndex()==-1,因为选择的索引可以取决于各种条件,而 getItemCount() 时只有 0 ,好吧,组合框是空的:-)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-09
        • 1970-01-01
        • 2013-03-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多