Вопрос

У меня есть крошечный (рикики) проблема в SWT ...

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

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

НО

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

/**
 * 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
        )
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top