1

我有一个带有 actionPerformed 事件的javax.swing.JTextField命名SearchBox 。

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

但它并不顺利,现在我又回到了原点。

谢谢指教!

4

3 回答 3

3

JTextField#postActionEvent将触发字段ActionListeners,这就是我假设您正在尝试做的事情

public class Program {

    public static synchronized void QuickSearchResults(JTextField textBox) {
        textBox.postActionEvent();
    }
}
于 2017-06-26T06:29:00.163 回答
2

我已经找到了实现这一目标的方法,但它肯定不是最好的。

public static synchronized void QuickSearchResults(JTextField textBox) {
    ActionListener actions[] = textBox.getActionListeners();
    for (ActionListener x : actions) {
        x.actionPerformed(null);
    }
}

在这种情况下,只有ActionListeners 被调用,但所有这些都被添加到JTextFieldusing 中addActionListener(ActionListener l)

正如我上面所说,这可能不是最好的方法,但可以解决问题。

于 2017-06-26T07:12:02.010 回答
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
    });
}
于 2017-06-26T06:20:13.833 回答