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 Cursor, TableColumn, 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 |
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);