Domanda

Ho un piccolo problema (rikiki) in SWT ...

Sto creando una piccola classe che estende org.eclipse.swt.widgets.Composite e che dovrebbe essere nidificata in un'app RCP ...

In questa piccola classe ho dei widget che dovrebbero reagire all'evento del mouse o della tastiera

MA

Devo usare i tasti modificatori ( Maiusc / Ctrl / Alt / ... ) per modificare i comportamenti dei miei coponenti quando li faccio clic o invio loro un evento da tastiera ...

Il problema è che non posso semplicemente ascoltare mod-key perché il mio utente può eliminarlo dal mio componente e quindi fare clic su di esso ...

Non posso usare un filtro di visualizzazione per evitare di disturbare la shell che nidifica il mio componente. ( ma potrebbe essere la mia ultima soluzione nel caso in cui non ci sia altra soluzione )

Non riesco a creare un componente trasparente che legge e invia eventi a tutti i miei componenti perché sarebbe, al massimo, grande quanto il mio componente e non riceverebbe mod-key dalla shell fuori dal mio componente (o addirittura fuori dalla shell) ...

Qualcuno ha qualche idea?

È stato utile?

Soluzione

Più o meno è come

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

Spero che aiuti ...

Altri suggerimenti

Prova qualcosa lungo queste linee per acquisire tutti i tasti e salvarli per dopo:

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

Puoi testare i tasti modificatori usando il seguente metodo:

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

Esempio di chiamata:

item.addKeyListener(new KeyAdapter() {
    @Override
    public void keyPressed(KeyEvent keyEvent) {
        if(getModifierKeyCode(keyEvent) == SWT.CTRL && keyEvent.keyCode == 'f') { // CTRL + F
            // do something
        )
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top