Question

J'ai un petit problème (rikiki) dans SWT ...

Je crée une petite classe qui étend org.eclipse.swt.widgets.Composite et qui est supposée être imbriquée dans une application RCP ...

Dans cette petite classe, j'ai des widgets qui sont supposés réagir à un événement de souris ou de clavier

MAIS

Je dois utiliser les touches de modification ( Maj / Ctrl / Alt /...) pour modifier le comportement de mes composants lorsque je clique dessus ou que je leur envoie un événement de clavier ...

Le problème est que je ne peux pas écouter les mod-key , car mon utilisateur peut le supprimer de mon composant, puis cliquer dessus ...

Je ne peux pas utiliser de filtre d'affichage pour ne pas perturber le shell qui imbrique mon composant. ( mais ce sera peut-être ma dernière solution au cas où il n'y aurait pas d'autre solution )

Je ne peux pas créer de composant transparent lisant et distribuant des événements à tous mes composants, car il aurait tout au plus la même taille que mon composant et n'entraînerait pas de frappes mod-key à partir du shell. sortir mon composant (ou même sortir de la coque) ...

Quelqu'un at-il une idée?

Était-ce utile?

La solution

Plus ou moins c'est comme

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_!>;
        }
    };
};

J'espère que ça aide…

Autres conseils

Essayez quelque chose dans ce sens pour capturer toutes les clés et les sauvegarder 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 );
        }
    } );

Vous pouvez tester les touches de modification à l'aide de la méthode suivante:

/**
 * Key code of pressed modifier key.
 *
 * @param keyEvent the received key event
 * @return the key code or 0 if no modifier key is pressed
 */
private static int getModifierKeyCode(KeyEvent keyEvent) {
    return (keyEvent.stateMask & SWT.MODIFIER_MASK);
}

Exemple d'appel:

item.addKeyListener(new KeyAdapter() {
    @Override
    public void keyPressed(KeyEvent keyEvent) {
        if(getModifierKeyCode(keyEvent) == SWT.CTRL && keyEvent.keyCode == 'f') { // CTRL + F
            // do something
        )
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top