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, écouteurs 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.

Type d'événement

Description

Widgets

Arm

Généré lorsqu'un widget est validé, une option de menu par exemple.

MenuItem

Control

Généré lorsqu'un contrôle est déplacé ou redimensionné.

Control, TableColumn, Tracker

Dispose

Généré lorsqu'un widget est supprimé, soit programmatiquement, soit par l'utilisateur.

Widget

Focus

Généré lorsqu'un contrôle est mis en évidence ou qu'il perd cette dernière.

Control

Help

Généré lorsque l'utilisateur demande de l'aide pour un widget, en appuyant par exemple sur la touche F1.

Control, Menu, MenuItem

Key

Généré lorsque l'utilisateur enfonce ou relâche une touche du clavier alors que le contrôle est actif.

Control

Menu

Généré lorsqu'un menu est masqué ou affiché.

Menu

Modify

Généré lorsque le texte d'un widget est modifié.

CCombo, Combo, Text, StyledText

Mouse

Généré lorsque l'utilisateur enfonce ou relâche un bouton de la souris, ou clique deux fois sur le contrôle.

Control

MouseMove

Généré lorsque l'utilisateur déplace la souris sur le contrôle.

Control

MouseTrack

Généré lorsque la souris entre, sort ou s'incruste sur le contrôle.

Control

Paint

Généré lorsqu'un contrôle doit être retracé.

Control

Selection

Généré lorsque l'utilisateur sélectionne un élément du contrôle.

Button, CCombo, Combo, CoolItem, CTabFolder, List, MenuItem, Sash, Scale, ScrollBar, Slider, StyledText, TabFolder, Table, Table CursorTableColumn, TableTree, Text, ToolItem, Tree

Shell

Généré lorsqu'un shell est réduit, agrandi, activé, désactivé ou fermé.

Shell

Traverse

Généré lorsqu'un contrôle est traversé par l'utilisateur à l'aide de séquences de touches.

Control

Tree

Généré lorsque l'utilisateur développe ou réduit les éléments de l'arborescence.

Tree, TableTree

Verify

Généré lorsque le texte d'un widget va être modifié. Donne à l'application l'opportunité de modifier le texte ou d'empêcher la modification.

Text, StyledText

Evénements sans type

Le système d'événements typés décrit ci-dessus est implémenté avec un mécanisme d'événement de widgets sans type, de faible niveau. Ce mécanisme n'est pas destiné à être utilisé par les applications, mais vous le verrez utilisé dans l'implémentation de SWT. Il est également utilisé dans un grand nombre d'implémentations de page d'assistant du plan de travail.

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 écouteurs à 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);

Copyright IBM Corporation and others 2000, 2003.