8
votes

Comment ajouter plusieurs actactenants pour plusieurs boutons de Java Swing

Je sais que créer un bouton et un auditeur d'action pour cela. Mais je veux avoir plusieurs boutons et agents d'action pour eux faire des actions distinctes non liées les unes aux autres.

Exemple: P>

protected JButton x;

x = new JButton("add");
x.addActionListener(this);

public void actionPerformed(ActionEvent evt) { //code.....}


1 commentaires

N'utilisez pas ActionListener, utilisez une action à la place: la règle générale est de toujours aller pour l'abstraction la plus élevée disponible


6 Réponses :


1
votes

Vous devez simplement créer une nouvelle instance du ActionListener à chaque fois. BTW pour de nombreuses raisons, il est recommandé d'utiliser action 's.

Voici une bonne ressource qui explique également pourquoi vous devriez utiliser des actions sur ActionListeners, un didacticiel Java intitulé Comment utiliser les actions

EDIT : @FMUCAR est correct, vous pouvez tout faire dans un seul actelistener. Bien que d'avoir des actions fonctionnelles séparées vous permet de les réutiliser de manière indépendante.


0 commentaires

6
votes

Vous pouvez soit utiliser actionvent.getsource () pour décider de la source et agir en conséquence, ou vous pouvez définir différents ActionListeners pour chacun d'eux.


0 commentaires

10
votes

Utiliser des classes intérieures:

x = new JButton("add"); 
x.addActionListener(
  new ActionListener() {
    public void actionPerformed(ActionEvent e) {
      //your code here
    }
  }
);


0 commentaires

1
votes

Vous pouvez créer différentes instances d'écouteurs d'action, sans utiliser votre classe: xxx

Il existe plusieurs autres méthodes pour créer un auditeur d'action, comme n'importe quelle classe, mais pour des actions courtes ceci (classe anonyme ) est une manière commode.


0 commentaires

18
votes

Qu'en est-il de: xxx


4 commentaires

+1 pour toutes les réponses. @oliholz ​​bel exemple d'utilisation d'actions.


Merci beaucoup. Je cherchais cela depuis des jours et je ne pouvais pas le trouver.


Ce code me donne une erreur à jbutton (nouvelle abstracttractaction () {}) , la méthode est indéfinie.


@FrasherGray Veuillez fournir la version d'erreur complète de votre version Java. Utilisez-vous importer javax.swing.jbutton; un import javax.swing.abstractAction ?



7
votes

Du ... XXX PRE>

ALORS P>

public void actionPerformed(ActionEvent evt)
{
     if (evt.getSource()==x)
         {
            //do something
         }
     else if (evt.getSource()==z)
         {
            //do something
         }
     else if (evt.getSource()==a)
         {
            //do something
         }
     else if (evt.getSource()==b)
         {
            //do something
         }
     else if (evt.getSource()==c)
         {
            //do something
         }
}


1 commentaires

evt.getsource () ne travaillait pas pour moi mais Evt.getagerCommand () a travaillé. Stackoverflow.com/a/7510013/11860907