Domanda

Ho una classe principale di un programma che lancia un'altra classe che gestisce tutte le cose GUI. Nella GUI, ho un tasto che ho bisogno di collegare un ActionListener a.

L'unico problema è, il codice da eseguire ha bisogno di risiedere all'interno della classe principale.

Come posso ottenere il metodo actionPerformed () per eseguire nella classe principale quando un tasto è scattato altrove?

È stato utile?

Soluzione

Crea il controller ( "principale" di classe) implementare l'interfaccia ActionListener, quindi passare un riferimento alla classe di visualizzazione:

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
   }
  }
 }

Si può essere fatto anche con azioni , ma questo è più utile in cui si desidera un pezzo di codice per rispondere a molti pulsanti.

Altri suggerimenti

Implementazione di una classe interna anonima come ActionListener sul pulsante, quindi chiamare il metodo sulla classe principale. Questo crea meno dipendenze ed evita il tag & stile interruttore di programmazione che implementa l'interfaccia ActionListener su una classe principale tende a promuovere.

In entrambi i casi si creerà un ciclo nel grafo delle dipendenze: la classe principale saprà di pulsante e il pulsante sarà necessario chiamare la classe principale. Questo potrebbe non essere una buona idea dal momento che rendere difficile comporre le cose in altro modo. Ma senza ulteriori informazioni è difficile giudicare la situazione o consigliare nulla di concreto.

Implementare ActionListener nella classe principale e aggiungere l'istanza classe principale come ascoltatore nel pulsante GUI.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top