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,我修改了答案,更改了建议的方法