2009-06-16 15 views
0

J'ai un petit (rikiki) problème dans SWT ...Modificateur Etat clé

Je fais une petite classe extension org.eclipse.swt.widgets.Composite et qui est censé être imbriquées dans une application RCP ...

dans cette petite classe je widgets qui sont censés réagir à la souris ou d'un événement clavier

MAIS

-je utiliser les touches de modification (Maj/Ctrl/Alt/...) pour modifier mes comportements coponents quand je clique ou les envoyer événement clavier ...

Le Probleme est que je ne peux pas écouter pour mod-clé de frappe parce que mon utilisateur peut frapper hors de mon composant puis cliquez dessus ...

Je ne peux pas utiliser un filtre d'affichage pour ne pas perturber la coquille qui niche mon élément. (mais peut-être il sera ma dernière solution au cas où il n'y aurait pas d'autre solution)

Je ne peux pas faire un composant transparent qui lit et envoie des événements à tous mes composants car il serait au maximum aussi grand que mon composant et ne recevra pas de mod-key frappes depuis le shell de mon composant (ou même dehors de la coquille) ...

Quelqu'un a-t-il une idée?

+0

Oh trouvé quelque chose sur les masques d'état ... je vais chercher plus à ce sujet ^^ – Ar3s

Répondre

3

plus ou moins comme il est

myComponent.add<Any>Listener(new <Appropriate>Listener(){ 
    @Override 
    public void <AppropriateMethod>(like KeyPress)>(<Appropriate>Event e) { 
     int stateMask=e.stateMask; 
     if((stateMask & SWT.ALT)==SWT.ALT){ 
      <Do_appropriate_actions>; 
     } 
     if((stateMask & SWT.CTRL)==SWT.CTRL){ 
      <Do_another_appropriate_actions>; 
     } 
     if((stateMask & SWT.SHIFT)==SWT.SHIFT){ 
      <Do_an_even_more_appropriate_actions_cause_you_are_kind_of_a_code_roxxor_!>; 
     } 
    }; 
};

Hope it helps ...

1

Essayez quelque chose le long de ces lignes pour capturer toutes les clés et les enregistrer pour plus tard:

Display.getDefault().addFilter(SWT.KeyDown, new Listener() { 

     public void handleEvent(Event passedEvent) { 
      //Listen for and store as static var last pressed keycode 
      System.out.println("Key Event: " + passedEvent); 
     } 
    }); 
+0

Oui, mais il capture toutes les touches de la presse, même les inutiles ... My Stat La méthode e-Mask (obtenir une touche de modification lorsque vous déclenchez un autre événement) est beaucoup plus simple ^^ (dans mon cas au moins) – Ar3s

+0

Par souci d'exhaustivité, pourriez-vous aussi poster votre méthode/solution à cette question? Merci – fisherja