代码之家  ›  专栏  ›  技术社区  ›  Ar3s

修改器键状态

  •  2
  • Ar3s  · 技术社区  · 16 年前

    (rikiki) SWT中的问题。..

    我正在扩大一个小班 并且它应该嵌套在RCP应用程序中。..

    在这个小班中,我有一些小部件,它们应该对鼠标或键盘事件做出反应

    但是

    Shift/Ctrl/Alt/。.. )当我点击他们或向他们发送键盘事件时,改变他们的行为。..

    问题是我不能只听 mod键 之所以引人注目,是因为我的用户可以将其从我的组件中删除,然后单击它。。。

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

    我无法制作一个透明的组件来读取事件并将其分发到我的所有组件,因为它最多只能和我的组件一样大,而且不会得到 mod键 从外壳中取出我的组件(甚至从外壳中)。..

    3 回复  |  直到 16 年前
        1
  •  4
  •   Ar3s    16 年前

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

    希望它能有所帮助。..

        2
  •  1
  •   fisherja    16 年前

    尝试以下方法来捕获所有密钥并保存以备后用:

        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 );
            }
        } );
    
        3
  •  0
  •   Terran    7 年前

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

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