2010-01-21 3 views
1

J'ai abandonné les GUI Builders pour Java et maintenant je les développe complètement en code (pas vraiment très dur, avec quelques heures de pratique). Maintenant, je m'occupe de la gestion des événements.Gestion des événements en Java: nécessite-t-il des gestionnaires d'événements vides?

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

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

    public void focusLost(FocusEvent e) 
    { 

    } 

}

Je dois fournir un gestionnaire d'action vide (comme ci-dessus) pour FocusLost, même si je ne ai pas besoin, ou je reçois un nastygram de l'éditeur disant que ce n'est pas une classe abstraite Cela signifie-t-il que les gestionnaires d'actions doivent afficher un gestionnaire d'actions pour chaque type d'événement associé à l'écouteur, même si l'action n'est pas utilisée dans le programme?

Merci pour toute aide à ce sujet.

Répondre

4

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 de la méthode. Vous les obtenez en changeant simplement le nom de l'interface de XyzListener à XyzAdapter.

Avec ces adaptateurs il vous suffit de remplacer les méthodes que vous avez vraiment besoin:

private class TextAction extends FocusAdapter 
{ 
    @Override 
    public void focusGained(FocusEvent e) 
    { 
     responseTxt.setText("Got focus"); 
    } 
} 
+1

Je suggère fortement d'ajouter un @Override là-dedans. –

+0

Oui bien sûr, vous avez raison. – x4u

2

Le système "événement" en Java est fondamentalement une réflexion après coup.

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

Si vous souhaitez seulement implémenter certains d'entre eux, vous pouvez hériter de la classe Adapter associée, qui fournit des implémentations par défaut pour tout ce que vous choisissez de ne pas remplacer.

+1

Je pas tout à fait dire que son clouée sur après coup, son tout simplement pas partie d'une fonctionnalité de langage (comme il est en C#). – cletus

+0

Peut-être que ma formulation est un peu forte. Ce que je comprends vraiment, c'est qu'il n'a pas de support spécifique de la langue. –