문제
나는 작은 것이있다 (리키키) 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
)
}
}
제휴하지 않습니다 StackOverflow