Tengo un javax.swing.JTextField llamado SearchBox con un Evento actionPerformed.

public void SearchBoxActionPerformed(java.awt.event.ActionEvent evt){
     //TODO
}

Lo que quiero hacer es llamar al método anterior desde otro método en una clase diferente pasando el objeto JTextField como argumento.

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.
         */
    }
}

Tenga en cuenta que llamar al nombre del método directamente no es una opción. Si Paso 3 objetos JTextField diferentes, el ActionPerformed relevante Los métodos deben ser llamados.

¿Hay una manera de lograr esto? Ya intenté usar

textBox.getActions();
textBox.getActionListeners();

Pero no salió bien, y ahora estoy de vuelta en el punto de partida.

Gracias en consejos!

1
Roshana Pitigala 26 jun. 2017 a las 08:47

3 respuestas

La mejor respuesta

JTextField#postActionEvent activará los campos ActionListener s, que es lo que supongo que estás intentando hacer

public class Program {

    public static synchronized void QuickSearchResults(JTextField textBox) {
        textBox.postActionEvent();
    }
}
3
MadProgrammer 26 jun. 2017 a las 06:29

Usa este código

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
    });
}
1
Nirodya Gamage 26 jun. 2017 a las 06:20

He encontrado una manera de lograr esto, pero ciertamente no es la mejor.

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

En este caso, solo se invocan los ActionListener s, pero todos los que se han agregado al JTextField usando addActionListener(ActionListener l).

Como he dicho anteriormente, esta puede no ser la mejor manera, pero resuelve el problema.

2
Roshana Pitigala 27 jun. 2017 a las 09:24