1

我在 SWT 中有一个小(rikiki)问题......

我正在制作一个扩展org.eclipse.swt.widgets.Composite的小类,它应该嵌套在 RCP 应用程序中......

在这个小课堂中,我有应该对鼠标或键盘事件做出反应的小部件

当我单击它们或向它们发送键盘事件时,我需要使用修饰键(Shift/Ctrl/Alt/... )来改变我的 coponents 行为...

问题是我不能只听mod-key敲击,因为我的用户可以从我的组件中删除它然后单击它......

我不能使用显示过滤器来避免干扰嵌套我的组件的外壳。(但如果没有其他解决方案,这可能是我的最后一个解决方案

我无法制作一个透明组件来读取事件并将其分派给我的所有组件,因为它最多与我的组件一样大,并且不会从我的组件(甚至是从外壳) ) ...

有人知道吗?

4

3 回答 3

4

或多或少就像

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

希望能帮助到你 ...

于 2009-06-26T10:17:13.040 回答
1

尝试按照以下方式捕获所有密钥并将它们保存以备后用:

    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 );
        }
    } );
于 2009-06-23T18:04:04.100 回答
0

您可以使用以下方法测试修饰键:

/**
 * 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
        )
    }
}
于 2018-08-28T08:59:11.980 回答