Pregunta

Tengo una clase principal en un programa que pone en marcha otra clase que se encarga de todas las cosas de interfaz gráfica de usuario. En la GUI, tengo un botón que necesito para conectar a un ActionListener.

El único problema es que el código que se ejecutará necesidades para residir dentro de la clase principal.

¿Cómo puedo obtener el método actionPerformed () para ejecutar en la clase principal cuando se hace clic en un botón en otro lugar?

¿Fue útil?

Solución

Haga su controlador (clase "principal") implementar la interfaz ActionListener, a continuación, pasar una referencia a la clase de vista:

public class View extends JFrame {
  public View(final ActionListener listener) {
   JButton button = new JButton("click me");
   button.addActionListener(listener);
   button.setActionCommand("do_stuff");

   getContentPane().add(button);

   pack();
   setVisible(true);
  }
 }

 public class Control implements ActionListener {

  public Control() {
   new View(this);
  }

  @Override
  public void actionPerformed(ActionEvent e) {
   if (e.getActionCommand().equals("do_stuff")) {
    // respond to button click
   }
  }
 }

También se puede hacer con acciones , pero eso es más útil cuando se busca una pieza de código para responder a muchos botones.

Otros consejos

Implementar una clase interna anónima como ActionListener en el botón, a continuación, llame al método en su clase principal. Esto crea menos dependencias y evita la programación de la etiqueta y el estilo interruptor que implementa la interfaz ActionListener en una clase principal tiende a promover.

En cualquier caso, se creará un ciclo en el grafo de dependencias: la clase principal sabrá sobre el botón y el botón tendrá que llamar a la clase principal. Esto podría no ser una buena idea ya que hará que sea difícil de componer las cosas de otra manera. Pero sin más información que es difícil juzgar la situación o recomendar algo concreto.

Implementar ActionListener en su clase principal y añadir la instancia de la clase principal como oyente en el botón de la GUI.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top