使用其对象调用action执行JTextField

时间:2017-06-26 05:47:13

标签: java swing jtextfield actionevent javax

我有一个名为 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();

但它并没有顺利进行,现在我回到原点。

谢谢你的建议!

3 个答案:

答案 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
    });
}