我在SWT中遇到一个很小的(rikiki)问题......

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

在这个小类中我有小部件应该对鼠标或键盘事件作出反应

<强> BUT

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

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

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

我无法创建一个透明的组件来读取和分配事件到我的所有组件,因为它最多会与我的组件一样大,并且不会从shell获取 mod-key 攻击我的组件(甚至是shell)......

有人有任何想法吗?

有帮助吗?

解决方案

或多或少就像

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