Question

J'ai une classe principale dans un programme qui lance une autre classe qui gère tous les trucs de l'interface graphique. Dans l'interface graphique, j'ai un bouton que je dois joindre un ActionListener à.

Le seul problème est, le code à exécuter les besoins de résider dans la classe principale.

Comment puis-je obtenir la méthode ActionPerformed () pour exécuter dans la classe principale quand un bouton est cliqué ailleurs?

Était-ce utile?

La solution

Faites votre commande (classe « principale ») implémenter l'interface ActionListener, puis passer une référence à la classe d'affichage:

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

Il peut aussi se faire avec Actions , mais c'est plus utile lorsque vous voulez un morceau de code pour répondre à de nombreux boutons.

Autres conseils

Mettre en œuvre une classe interne anonyme ActionListener sur le bouton, puis appeler la méthode de votre classe principale. Cela crée moins de dépendances et évite la programmation de l'étiquette et le style de commutateur qui implémente l'interface ActionListener sur une classe principale tend à promouvoir.

Dans les deux cas, il va créer un cycle dans votre graphe de dépendance: la classe principale va savoir sur le bouton et le bouton devra appeler la classe principale. Cela pourrait ne pas être une bonne idée, car il sera difficile de composer des choses d'une autre façon. Mais sans plus d'informations, il est difficile de juger de la situation ou recommander quelque chose de concret.

Mettre en œuvre ActionListener dans votre classe principale et ajoutez la principale instance de classe comme auditeur sur votre bouton GUI.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top