Състояние на модификаторния ключ

Имам малък (rikiki) проблем в SWT ...

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

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

НО

Трябва да използвам модифициращи клавиши (Shift/Ctrl/Alt/...), за да променя поведението на моите компоненти, когато щракна върху тях или им изпратя събитие от клавиатурата ...

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

Не мога да използвам филтър за дисплей, за да избегна смущения в обвивката, която влага моя компонент. (но може да е последното ми решение, в случай че няма друго решение)

Не мога да направя прозрачен компонент, който чете и изпраща събития до всички мои компоненти, защото най-много ще бъде толкова голям, колкото моя компонент и няма да получава mod-key удари от обвивката на моя компонент (или дори извън черупката) ...

Някой има ли представа?


person Ar3s    schedule 16.06.2009    source източник
comment
О, намерих нещо за държавните маски ... ще потърся повече за това ^^   -  person Ar3s    schedule 16.06.2009


Отговори (3)


Горе-долу е като

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

Дано помогне...

person Ar3s    schedule 26.06.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 );
        }
    } );
person fisherja    schedule 23.06.2009
comment
Да, но улавя всички натискания на клавиши, дори и ненужните ... Моят метод State-Mask (натискане на модификаторния клавиш, когато задействате друго събитие) е много по-прост ^^ (поне в моя случай) - person Ar3s; 24.06.2009
comment
За пълнота можете ли да публикувате своя метод/решение и на този въпрос? Благодаря - person fisherja; 24.06.2009

Можете да тествате за модифициращи ключове, като използвате следния метод:

/**
 * 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
        )
    }
}
person Terran    schedule 28.08.2018
comment
Благодаря. (Това обаче беше преди 9 години, но се надявам, че това ще помогне на някого един ден може би) - person Ar3s; 28.08.2018