Comment ajouter un ActionListener sur un JButton en Java
private JButton jBtnDrawCircle = new JButton("Circle");
private JButton jBtnDrawSquare = new JButton("Square");
private JButton jBtnDrawTriangle = new JButton("Triangle");
private JButton jBtnSelection = new JButton("Selection");
comment ajouter des écouteurs d'action à ces boutons, de sorte que d'une méthode principale je puisse appeler actionperformed
sur eux, donc quand ils sont cliqués je peux les appeler dans mon programme?
3 réponses
de deux façons:
1. implémenter ActionListener dans votre classe, puis utiliser jBtnSelection.addActionListener(this);
plus tard, vous devrez définir un menthod,public void actionPerformed(ActionEvent e)
. Cependant, faire cela pour plusieurs boutons peut être déroutant, parce que le actionPerformed
méthode aura de vérifier la source de chaque événement (e.getSource()
) pour voir de quel bouton il vient.
2. Utiliser les classes internes anonymes:
jBtnSelection.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
selectionButtonPressed();
}
} );
plus tard, vous devrez définir selectionButtonPressed()
.
Cela fonctionne mieux lorsque vous avez plusieurs boutons, parce que vos appels à des méthodes individuelles pour gérer les actions sont juste à côté de la définition du bouton.
La deuxième méthode vous permet également d'appeler la méthode de sélection directement. Dans ce cas, vous pourriez l'appeler selectionButtonPressed()
si une autre action se produit, par exemple, quand une minuterie se déclenche ou quelque chose comme ça (mais dans ce cas, votre méthode s'appellerait quelque chose de différent, peut-être selectionChanged()
).
votre meilleur pari est de revoir le tutoriels Java Swing, plus précisément le tutoriel sur les Boutons.
Le court extrait de code est:
jBtnDrawCircle.addActionListener( /*class that implements ActionListener*/ );
je ne suis pas totalement à la suite, mais pour ajouter une action à l'écoute, vous appelez simplement addActionListener (à partir du bouton Abstract). Si cela ne répond pas entièrement à votre question, Pouvez-vous fournir plus de détails?