Nous avons vu comment créer un affichage et des widgets, et exécuter la boucle de messages de notre application. Où a lieu le véritable travail ? Il 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 exécuté. Ce simple exemple 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, il existe une interface qui définit l'écouteur (XyzListener), une classe qui fournit des informations événementielles (XyzEvent) et une méthode d'API pour ajouter l'écouteur (addXyzListener). S'il existe plusieurs méthodes définies dans l'interface de l'écouteur, un adaptateur (XyzAdapter) qui implémente l'interface de l'écouteur et fournit des méthodes vides est fourni. 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, CTabFolder, List, MenuItem, Sash, Scale, ScrollBar, Slider, StyledText, TabFolder, Table, 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 l'extrait 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);