Pregunta

Tengo un pequeño problema (rikiki) en SWT ...

Estoy creando una clase pequeña que se extiende org.eclipse.swt.widgets.Composite y que se supone que está anidada en una aplicación RCP ...

En esta clase pequeña, tengo widgets que se supone que reaccionan al evento del mouse o del teclado

BUT

Necesito usar las teclas modificadoras ( Shift / Ctrl / Alt / ... ) para modificar el comportamiento de mis coponentes cuando hago clic en ellas o les envío un evento de teclado ...

El problema es que no puedo escuchar simplemente la marca mod-key porque mi usuario puede tacharlo desde mi componente y luego hacer clic en él ...

No puedo usar un filtro de visualización para evitar molestar al shell que anida mi componente. ( pero puede que sea mi última solución en caso de que no haya otra solución )

No puedo crear un componente transparente que lea y envíe eventos a todos mis componentes porque, a lo sumo, sería tan grande como mi componente y no obtendrá mod-key huelgas desde el shell fuera de mi componente (o incluso fuera del shell) ...

¿Alguien tiene alguna idea?

¿Fue útil?

Solución

Más o menos es como

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

Espero que ayude ...

Otros consejos

Pruebe algo en este sentido para capturar todas las claves y guardarlas para más adelante:

    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 );
        }
    } );

Puedes probar las claves modificadoras usando el siguiente método:

/**
 * 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);
}

Ejemplo de llamada:

item.addKeyListener(new KeyAdapter() {
    @Override
    public void keyPressed(KeyEvent keyEvent) {
        if(getModifierKeyCode(keyEvent) == SWT.CTRL && keyEvent.keyCode == 'f') { // CTRL + F
            // do something
        )
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top