POO et Java
Daniel Tschirhart & Pierre Sosinski - TP4 POO et Java Introduction aux interfaces graphiques 3/10
2. Projet TP4, classe E2
+ void windowActivated (WindowEvent e)
+ void windowClosed (WindowEvent e)
+ void windowClosing (WindowEvent e)
+ void windowDeactivated(WindowEvent e)
+ void windowDeiconified(WindowEvent e)
+ void windowIconified (WindowEvent e)
+ void windowOpened (WindowEvent e)
<< interface >> WindowListener
a besoin
E2
+ void setTitle(String title)
Frame
spécialise
(extends)
réalise
(implements)
+ public void addWindowListener(WindowListener l)
+ public void setSize(int width,int height)
Window
extends
+ void windowActivated (WindowEvent e)
+ void windowClosed (WindowEvent e)
+ void windowClosing (WindowEvent e)
+ void windowDeactivated(WindowEvent e)
+ void windowDeiconified(WindowEvent e)
+ void windowIconified (WindowEvent e)
+ void windowOpened (WindowEvent e)
<< abstract >> WindowAdapter
+ void windowClosing (WindowEvent e)
MyWindowClassAdapter
spécialise
(extends)
écouteur
E2 possède un écouteur externe :
L’exercice E2 illustre comment une classe
autre que E2 (ici MyWindowClassAdapter)
peut aussi être « écouteur de fenêtre »
de la classe E2 en héritant d’un
adaptateur » qui fait le travail
« fastidieux » à notre place.
écouté
Concepts à assimiler :
Redéfinir (traduction de overload) un gestionnaire d’événement ou écouteur défini dans une classe
abstraite.
Description et objectif du TP :
Dans le TP précédent vous avez défini les nombreuses fonctions déclarées dans l’interface
WindowListener. Sans l’aide d’eclipse, ce travail aurait été très fastidieux.
Les concepteurs de la bibliothèque AWT ont prévu un mécanisme alternatif très astucieux consistant à
faire hériter une classe abstraite (dans le cas présent WindowAdapter) de l’interface
WindowListener. Cette classe définit toutes les fonctions de l’interface par des fonctions vides
(comme la plupart des gestionnaires définis dans l’exercice E1).
La classe WindowAdapter est rendue abstraite (par le préfixe abstract) pour interdire toute
instanciation directe de la classe, instanciation ne présentant aucun intérêt (la classe ne comporte que
des fonctions vides). Par contre en héritant de cette classe vous n’aurez besoin que de redéfinir la ou les
fonctions qui vous intéressent.
Voici le code de la bibliothèque Java illustrant ce mécanisme :
interface WindowListener
{
void windowActivated(WindowEvent e);
void windowClosing (WindowEvent e);
// ...
}
abstract class WindowAdapter implements WindowListener
{
public void windowActivated(WindowEvent e)
{
}
public void windowClosing (WindowEvent e)
{
}
// ...
}