我有一个名为 SearchBox 的javax.swing.JTextField
,其中包含actionPerformed事件。
public void SearchBoxActionPerformed(java.awt.event.ActionEvent evt){
//TODO
}
我想要做的是通过传递JTextField
对象作为参数,从另一个类中的另一个方法调用上述方法。
import javax.swing.JTextField;
public class Program {
public static synchronized void QuickSearchResults(JTextField textBox) {
/*
* I want to call ActionPerformed method of textBox if it has any.
*/
}
}
请注意,不能直接调用方法名称。如果 我传递了3个不同的
JTextField
个对象,相关的ActionPerformed 应该调用方法。
有没有办法实现这个目标?我已经尝试过使用了,
textBox.getActions();
textBox.getActionListeners();
但它并没有顺利进行,现在我回到原点。
谢谢你的建议!
答案 0 :(得分:2)
JTextField#postActionEvent
会触发ActionListener
字段,这是我假设您正在尝试做的事情
public class Program {
public static synchronized void QuickSearchResults(JTextField textBox) {
textBox.postActionEvent();
}
}
答案 1 :(得分:2)
我找到了实现这一目标的方法,但它肯定不是最好的。
public static synchronized void QuickSearchResults(JTextField textBox) {
ActionListener actions[] = textBox.getActionListeners();
for (ActionListener x : actions) {
x.actionPerformed(null);
}
}
在这种情况下,只会调用ActionListener
,但所有这些都已使用JTextField
添加到addActionListener(ActionListener l)
。
正如我上面所说,这可能不是最好的方法,但解决了这个问题。
答案 2 :(得分:1)
使用此代码
public static synchronized void QuickSearchResults(JTextField textBox) {
/*
* I want to call ActionPerformed method of textBox if it has any.
*/
textBox.addActionListener(e->{
//Do what you want
});
}