Une fois un affichage et des widgets créés et après le lancement de la boucle de message de l'application, où se situe toute l'activité ? Elle a lieu chaque fois qu'un événement est lu dans la file et distribué à un widget. Une grande partie de la logique d'application est implémentée en réponse aux événements utilisateur.
Le schéma de base est celui dans lequel vous ajoutez un écouteur à des widgets que vous avez créés : lorsque l'événement approprié se produit, le code de l'écouteur est alors exécuté. Cet exemple simple est adapté de org.eclipse.swt.examples.helloworld.HelloWorld3:
Display display = new Display (); Shell shell = new Shell (display); Label label = new Label (shell, SWT.CENTER); ... shell.addControlListener(new ControlAdapter() { public void controlResized(ControlEvent e) { label.setBounds (shell.getClientArea ()); } });
Pour chaque type d'écouteur, une interface définit l'écouteur (XyzListener), une classe fournit des informations sur les événements (XyzEvent) et une méthode d'API ajoute l'écouteur (addXyzListener). S'il existe plusieurs méthodes dans l'interface de l'écouteur, un adaptateur (XyzAdapter) implémente cette dernière et fournit des méthodes vides. Tous les événements, modules d'écoute et adaptateurs sont définis dans le package org.eclipse.swt.events.
Le tableau ci-dessous résume les événements disponibles et les widgets qui supportent chacun d'eux. Les événements peuvent être divisés en deux catégories générales : les événements de haut niveau qui représentent une opération logique sur un contrôle et les événements de faible niveau qui décrivent des interactions utilisateurs plus spécifiques. Un niveau élevé peut être représenté par plusieurs événements de niveau faible qui peuvent avoir une plate-forme différente. Les événements de faible niveau doivent être utilisés généralement uniquement pour des implémentations de widgets personnalisés.
Type d'événement |
Description |
---|---|
Activate, Deactivate | Généré lorsqu'un contrôle est activé ou désactivé. |
Arm | Un élément du menu est armé (surligné et prêt à être sélectionné). |
Close | Un shell va se fermer comme demandé par le gestionnaire de fenêtres. |
DefaultSelection | L'utilisateur sélectionne un élément en invoquant une action de sélection par défaut. Par exemple, en appuyant sur Entrée ou en double-cliquant sur une ligne d'un tableau. |
Dispose | Un widget va être supprimé, soit de manière programmée ou par un utilisateur. |
DragDetect | L'utilisateur a initié une possible opération de glisser-déplacer. |
Expand, Collapse | Un élément d'une arborescence est agrandi ou réduit. |
Help | L'utilisateur a demandé de l'aide pour un widget. Par exemple, ceci se produit lorsque vous appuyez sur la touche F1 sous Windows. |
Iconify, Deiconify | Un shell a été réduit, agrandi ou restauré. |
MenuDetect | L'utilisateur a demandé un menu contextuel. |
Modify | Le texte du widget a été modifié. |
Move, Resize | Un contrôle a changé de position ou a été redimensionné, de manière programmée ou par un utilisateur. |
Selection | L'utilisateur sélectionne un élément dans le contrôle. Par exemple, en cliquant sur une ligne d'un tableau ou en parcourant les éléments à l'aide du clavier. |
SetData | Les données doivent être définies sur un élément de tableau lorsque vous utilisez un tableau virtuel. |
Show, Hide | La visibilité d'un contrôle a été modifiée. |
Traverse | L'utilisateur tente de traverser le contrôle à l'aide de la frappe du clavier. Par exemple, les touches d'espacement et de tabulation sont utilisées pour la traversée. |
Verify | Le texte d'un widget va être modifié. Cet événement donne une chance à l'application de modifier le texte ou d'empêcher la modification. |
Type d'événement |
Description |
---|---|
FocusIn, FocusOut | Un contrôle a gagné ou perdu la cible. |
KeyDown, KeyUp | L'utilisateur a appuyé ou relâché une touche du clavier lorsque le contrôle a atteint la cible du clavier. |
MouseDown, MouseUp, MouseDoubleClick | L'utilisateur a appuyé, relâché ou double-cliqué avec la souris sur le contrôle. |
MouseMove | L'utilisateur a déplacé la souris au-dessus du contrôle. |
MouseEnter, MouseExit, MouseHover | La souris est entré, a quitté ou a survolé le contrôle. |
MouseWheel | La molette de la souris a été tournée. |
Paint | Le contrôle a été endommagé et doit être repeint. |
Outre le système d'événements typés décrit ci-dessus, SWT prend en charge un mécanisme d'événements de widgets sans type de faible niveau. Le mécanisme sans type se base sur une constante pour identifier le type d'événement et définit un écouteur générique fourni avec cette constante. Ceci permet à l'écouteur d'implémenter un écouteur "au cas par cas". Dans le fragment suivant, nous définissons un gestionnaire d'événements génériques et ajoutons plusieurs modules d'écoute à un shell.
Shell shell = new Shell(); Listener listener = new Listener() { public void handleEvent(Event e) { switch (e.type) { case SWT.Resize: System.out.println ("Resize received"); break; case SWT.Paint: System.out.println ("Paint received"); break; default: System.out.println("Unknown event received"); } } }; shell.addListener(SWT.Resize, listener); shell.addListener(SWT.Paint, listener);