Pergunta

Eu tenho uma pequena (rikiki) problema no SWT ...

Estou fazendo uma pequena classe estendendo org.eclipse.swt.widgets.Composite e que é suposto ser aninhados em uma RCP aplicativo ...

Nesta pequena classe I tem os widgets que deveriam reagir ao mouse ou de teclado

MAS

Eu preciso usar as teclas modificadoras ( Shift / Ctrl / Alt /...) para alterar meus coponents comportamentos quando clico-los ou enviá-los evento de teclado ...

O probleme é que eu não posso simplesmente ouvir o mod-chave surpreendente porque o meu usuário pode atacar-lo para fora do meu componente e, em seguida, clique nele ...

Eu não posso usar um filtro de exibição para evitar perturbar o shell que nidifica meu componente. (, mas pode ser que será a minha última solução no caso, não há outra solução )

Eu não posso fazer um componente transparente que lê e eventos de despacho para todos os meus componentes porque seria, no máximo, ser tão grande quanto meu componente e não vai conseguir mod-chave greves a partir da casca o meu componente (ou mesmo fora do shell) ...

Do Alguém tem alguma idéia?

Foi útil?

Solução

Mais ou menos é 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_!>;
        }
    };
};

Hope isso ajuda ...

Outras dicas

Tente algo ao longo destas linhas para capturar todas as teclas e guardá-las para mais tarde:

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

Você pode testar para as teclas modificadoras usando método a seguir:

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

Exemplo chamada:

item.addKeyListener(new KeyAdapter() {
    @Override
    public void keyPressed(KeyEvent keyEvent) {
        if(getModifierKeyCode(keyEvent) == SWT.CTRL && keyEvent.keyCode == 'f') { // CTRL + F
            // do something
        )
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top