Состояние ключа модификатора - PullRequest
1 голос
/ 16 июня 2009

У меня крошечная проблема (rikiki) в SWT ...

Я создаю небольшой класс, расширяющий org.eclipse.swt.widgets.Composite и который должен быть вложен в приложение RCP ...

В этом небольшом классе у меня есть виджеты, которые должны реагировать на события мыши или клавиатуры

НО

Мне нужно использовать клавиши-модификаторы ( Shift / Ctrl / Alt /...), чтобы изменить поведение моих компонентов, когда я нажимаю на них или отправляю им событие клавиатуры ...

Проблема в том, что я не могу просто прослушать нажатие mod-key , потому что мой пользователь может вычеркнуть его из моего компонента и затем щелкнуть по нему ...

Я не могу использовать фильтр отображения, чтобы не нарушить оболочку, в которую вложен мой компонент. (, но, возможно, это будет моим последним решением, если нет другого решения )

Я не могу создать прозрачный компонент, который читает и отправляет события всем моим компонентам, потому что он, самое большее, будет таким же большим, как мой компонент, и не получит mod-key ударов из оболочки. мой компонент (или даже из оболочки) ...

У кого-нибудь есть идеи?

Ответы [ 3 ]

4 голосов
/ 26 июня 2009

Более или менее похоже на

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

Надеюсь, это поможет ...

1 голос
/ 23 июня 2009

Попробуйте что-нибудь в этом духе, чтобы захватить все ключи и сохранить их на потом:

    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 голосов
/ 28 августа 2018

Вы можете проверить клавиши-модификаторы, используя следующий метод:

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

Пример вызова:

item.addKeyListener(new KeyAdapter() {
    @Override
    public void keyPressed(KeyEvent keyEvent) {
        if(getModifierKeyCode(keyEvent) == SWT.CTRL && keyEvent.keyCode == 'f') { // CTRL + F
            // do something
        )
    }
}
...