我有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中的项目的情况下触发事件?提前谢谢。
答案 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()
方法之外,还没有显示任何其他方法来触发通知。