Comment détecter ctrl-f dans mon application SWT
J'ai écrit une SWT de l'INTERFACE utilisateur qui a pour principale fonction de l'affichage du texte dans un StyledText de contrôle. Je veux ajouter un gestionnaire pour Ctrl+Fde sorte que, lorsque cette touche, l'accent est mis d'une zone de recherche. J'ai essayé d'utiliser le code suivant pour détecter la pression de touche.
sWindow = new Shell();
...
sWindow.getDisplay().addFilter(SWT.KeyDown, new Listener()
{
@Override
public void handleEvent(Event e)
{
System.out.println("Filter-ctrl: " + SWT.CTRL);
System.out.println("Filter-mask: " + e.stateMask);
System.out.println("Filter-char: " + e.character);
}
});
Je m'attendais à ce que lorsque j'ai appuyé sur Ctrl+f je voudrais voir le résultat suivant:
Filter-ctrl: 262144
Filter-mask: 262144
Filter-char: f
Cependant, dans la pratique, j'ai fait voir la suite.
Filter-ctrl: 262144
Filter-mask: 262144
Filter-char: <unprintable char - displayed as a box in eclipse console>
J'ai deux questions:
- Est De L'Affichage.addFilter(...) la meilleure façon d'ajouter un raccourci global? J'ai essayé d'Affichage.addListener(...) mais ce n'ai pas eu de manifestations à tous.
- Pourquoi je ne reçois pas la touche de caractère lorsque je suis maintenant Ctrl? Quand j'ai maintenez la touche alt ou maj-je obtenir attendus masque et la touche de caractère.
source d'informationauteur mchr
Vous devez vous connecter pour publier un commentaire.
Is Display.addFilter(...) the best way to add a glbal shortcut? I tried Display.addListener(...) but this didn't receive any events at all.
Oui, normalement
Display.addFilter(...)
est le meilleur moyen d'ajouter un glbal raccourci parce qu'ils ont plus de préférence sur les écouteurs d'événement. Voir le commentaire ci-dessous à partir deDisplay.addFilter(...)
javadoc.Pour votre deuxième question:
Why don't I get the pressed character when I'm holding down ctrl? When I hold down alt or shift I get the expected mask and the pressed character.
Le problème, c'est que vous cherchez au mauvais endroit. Au lieu d'interroger
e.character
vous devriez être en utilisante.keyCode
. Comme par javadoc dee.character
vous n'obtenez pas seulement de caractèref
:Ainsi, lorsque vous appuyez sur la touche CTRL+f puis il convertit en
0x06
ASCII (ACK). Ce qui n'est pas le cas lorsque vous faites ALT+f ou MAJ+f.D'autre part la javadoc de
e.keyCode
dit:Vérifier le code ci-dessous pour plus de détails. Pour la démo, j'ai essayé de mettre en écoute sur le
Display
etTest
.