質問
SWTに小さな(rikiki)問題があります...
org.eclipse.swt.widgets.Composite を拡張し、RCPアプリにネストされることになっている小さなクラスを作成しています...
この小さなクラスには、マウスまたはキーボードのイベントに反応するはずのウィジェットがあります
しかし
修飾キー( Shift / Ctrl / Alt /...)を使用して、コンポーネントをクリックしたりキーボードイベントを送信したりするときに、コンポーネントの動作を変更する必要があります...
問題は、ユーザーがコンポーネントからストライクしてクリックすることができるため、 mod-key ストライクを聞くことができないことです...
ディスプレイフィルターを使用して、コンポーネントをネストするシェルの邪魔を避けることはできません(ただし、他に解決策がない場合の最後の解決策になる可能性があります)
すべてのコンポーネントのイベントを読み取り、ディスパッチする透明なコンポーネントを作成することはできません。それは、せいぜい私のコンポーネントと同じ大きさで、シェルから mod-key ストライクを受け取らないからですコンポーネントを(またはシェルからも)アウトします...
誰にもアイデアはありますか?
解決
多かれ少なかれ似ています
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