1 votes

Manipulation des événements en Java : nécessite-t-elle des gestionnaires d'événements vides ?

J'ai abandonné les constructeurs GUI pour Java et maintenant je les développe entièrement en code (pas vraiment très difficile, avec quelques heures de pratique). Maintenant je m'attaque à la gestion des événements.

Mais je remarque que lorsque j'essaie d'utiliser une classe pour implémenter un type d'auditeur, par exemple

private class TextAction implements FocusListener
{
   public void focusGained(FocusEvent e)
   {
       responseTxt.setText("A obtenu le focus");
   }

   public void focusLost(FocusEvent e)
   {

   }

}

Je dois fournir un gestionnaire d'actions vide (comme ci-dessus) pour focusLost, même si je n'en ai pas besoin, sinon je reçois un message désagréable de l'éditeur disant que ce n'est pas une classe abstraite et ne remplace pas la méthode FocusLost, etc.

Cela signifie-t-il que les gestionnaires d'événements doivent montrer un gestionnaire d'événements pour chaque type d'événement associé à l'auditeur, même lorsque l'action ne sera pas utilisée dans le programme ?

Merci pour toute aide sur ce sujet.

4voto

x4u Points 7436

Il existe déjà des classes de base dans le JDK pour toutes les interfaces d'écoute standard. Ces classes implémentent toutes les méthodes de l'interface mais ne font rien dans les corps des méthodes. Vous les obtenez en changeant simplement le nom de l'interface de XyzListener en XyzAdapter.

Avec ces adaptateurs, vous n'avez besoin de remplacer que les méthodes dont vous avez vraiment besoin :

private class TextAction extends FocusAdapter
{
   @Override
   public void focusGained(FocusEvent e) 
   { 
       responseTxt.setText("Focus obtenu"); 
   } 
}

2voto

Anon. Points 26829

Le système "event" en Java est essentiellement une pensée après-coup ajoutée de manière pirate.

Il n'y a rien de spécial concernant les interfaces impliquées - comme toutes les interfaces, vous devez implémenter toutes leurs méthodes.

Si vous voulez seulement implémenter certaines d'entre elles, vous pouvez hériter de la classe Adapter associée, qui fournit des implémentations par défaut ne faisant rien pour ce que vous choisissez de ne pas remplacer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X