문제

나는 작은 것이있다 (리키키) SWT의 문제 ...

나는 작은 수업을 확장하고 있습니다 org.eclipse.swt.widgets.composite 그리고 RCP 앱에 중첩되어 있어야합니다 ...

이 작은 클래스에는 마우스 또는 키보드 이벤트에 반응하는 위젯이 있습니다.

하지만

수정 자 키를 사용해야합니다 (shift/ctrl/alt/...) Coponents 동작을 클릭하거나 키보드 이벤트를 보낼 때 동작을 변경하려면 ...

문제는 내가들을 수 없다는 것입니다 모드 키 내 사용자가 내 구성 요소에서 파괴 한 다음 클릭 할 수 있기 때문에 눈에 띄게됩니다.

디스플레이 필터를 사용하여 내 구성 요소에 둥지를 둔 쉘을 방해하지 않습니다.그러나 다른 해결책이없는 경우에 내 마지막 해결책 일 수 있습니다.)

나는 모든 구성 요소에 이벤트를 읽고 파견하는 투명한 구성 요소를 만들 수 없습니다. 모드 키 내 구성 요소 (또는 껍질에서 나가는) 껍질에서 벗어난 ...

아무도 아이디어가 있습니까?

도움이 되었습니까?

해결책

다소 비슷합니다

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