Evénements

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.

Evénements de niveau élevé

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.

Evénements de faible niveau

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.

Evénements sans type

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);