Java 通过触发事件在JComboBox中设置SelectedItem

Java 通过触发事件在JComboBox中设置SelectedItem,java,swing,jcombobox,Java,Swing,Jcombobox,我有一个JComboBox JComboBox tableChoose = new JComboBox(); tableChoose.addItem("Bill"); tableChoose.addItem("Bob"); tableChoose.setSelectedItem("Bill"); 以及一些处理方法 public void addComboActionListener(IComboHandler handler){ tableChoose.addActionListene

我有一个
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”,以便在
actionperformed
中触发事件


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

使用
actionPerformed()
方法传递一个虚拟
ActionEvent
。例如:

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

警告此建议是在查看源代码的基础上设计的。注释声明不直接调用此方法,因此您将自行承担风险,因为将来实现可能会更改


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

使用
actionPerformed()
方法传递虚拟
ActionEvent
。例如:

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

警告此建议是在查看源代码的基础上设计的。注释声明不直接调用此方法,因此您将自行承担风险,因为将来实现可能会更改


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

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

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");

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

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");

在设置所选项目之前是否尝试添加侦听器?可能@gtgaxiola它受
保护
,除非您让类扩展
JComboBox
(这不是OP的场景),否则无法调用它。答案是在设置所选项目之前尝试添加侦听器的最佳方法?可能@gtgaxiola它受
保护
,除非您使类扩展
JComboBox
(这不是OP的场景),否则无法调用它。答案是您尝试执行的最佳方法。它是一个受保护的
方法,只有当您的类与包含该方法的类位于同一个包中时,您才能使用它。因此,如果不扩展
JComboBox
,OP将无法调用它。谢谢@backslax,我修改了答案,更改了建议的方法。它是一个
受保护的
方法,只有当您的类与包含该方法的类在同一个包中时,您才能使用它。因此,如果不扩展
JComboBox
,OP将无法调用它。谢谢@backslax,我修改了答案,更改了建议的方法