通过触发事件在JComboBox中设置setSelectedItem

时间:2014-07-14 15:46:23

标签: java swing jcombobox

我有JComboBox

JComboBox tableChoose = new JComboBox();
tableChoose.addItem("Bill");
tableChoose.addItem("Bob");
tableChoose.setSelectedItem("Bill");

和一些处理方法

public void addComboActionListener(IComboHandler handler){
    tableChoose.addActionListener(handler);
}

public Object getTableChooseSelectedItem(){
    return tableChoose.getSelectedItem();
}

public void actionPerformed(ActionEvent event) {
    JOptionPane.showMessageDialog(null, fileReaderWindow.getTableChooseSelectedItem() , null, JOptionPane.ERROR_MESSAGE);
}

如您所见,我将“Bill”设为首选项目。当我运行该程序时,我必须重新选择“Bill”才能在actionPerfomed中触发该事件。

有没有办法在不重新选择JComboBox中的项目的情况下触发事件?提前谢谢。

2 个答案:

答案 0 :(得分:2)

在 设置所选项目之前添加动作侦听器

JComboBox<String> b = new JComboBox<String>();

b.addItem("A");
b.addItem("B");
b.addItem("C");

b.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        JComboBox<String> src = (JComboBox<String>) e.getSource();
        System.out.println("ActionListener called. '"+src.getSelectedItem()+"' selected.");
    }
});

b.setSelectedItem("A");

输出:

ActionListener called. 'A' selected.

答案 1 :(得分:1)

使用传递虚拟actionPerformed()的{​​{1}}方法。例如:

ActionEvent

应忽略该参数,并应触发tableChoose.actionPerformed(new ActionEvent(tableChoose, 0, "")); 方法。

警告我们设计了这个建议,查看JComboBox的源代码。注释声明不直接调用此方法,因此您将自行承担风险,因为实施可能在将来发生变化。

进一步查看源代码除了调用fireActionEvent()方法之外,还没有显示任何其他方法来触发通知。