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.....}
6 Réponses :
Vous devez simplement créer une nouvelle instance du Voici une bonne ressource qui explique également pourquoi vous devriez utiliser des actions sur ActionListeners, un didacticiel Java intitulé Comment utiliser les actions p>
ActionListener code> à chaque fois.
BTW pour de nombreuses raisons, il est recommandé d'utiliser action code>'s. P>
Vous pouvez soit utiliser actionvent.getsource () code> pour décider de la source et agir en conséquence, ou vous pouvez définir différents ActionListeners code> pour chacun d'eux. P>
Utiliser des classes intérieures:
x = new JButton("add");
x.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
//your code here
}
}
);
Vous pouvez créer différentes instances d'écouteurs d'action, sans utiliser votre classe: 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. p> p>
Qu'en est-il de:
+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 () {}) code>, 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; code> un import javax.swing.abstractAction code>?
Du ... 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
}
}
evt.getsource () ne travaillait pas pour moi mais Evt.getagerCommand () a travaillé. Stackoverflow.com/a/7510013/11860907
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