Modifier Key Zustand
Frage
Ich habe ein winziges (rikiki) Problem in SWT ...
Ich mache eine kleine Klasse erweitern org.eclipse.swt.widgets.Composite und die angeblich in einer RCP App verschachtelt werden ...
In dieser kleinen Klasse-I-Widgets haben, die angeblich Maus- oder Tastaturereignis reagieren
ABER
Ich brauche Zusatztasten zu verwenden ( Shift / Strg / Alt /...) mein coponents Verhalten zu ändern, wenn ich sie klicken oder sie Tastaturereignis senden ...
Die Probleme sind, dass ich nicht nur für hören mod-Taste auffällig, weil mein Benutzer kann es aus meiner Komponente streichen und es dann auf ...
Ich kann nicht einen Anzeigefilter zu vermeiden, verwenden Sie den Shell zu stören, dass meine Komponente verschachtelt. ( aber sein kann, es wird meine letzte Lösung sein, falls es keine andere Lösung )
Ich kann nicht eine transparente Komponente machen, die alle meine Komponenten liest und Versand Ereignisse, weil es wäre, höchstens, wie meine Komponente so groß sein und bekommen wont mod-Taste Streiks von der Schale aus meiner Komponente (oder sogar aus der Schale) ...
Hat jemand eine Idee?
Lösung
Mehr oder weniger ist es wie
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_!>;
}
};
};
Hoffe, es hilft ...
Andere Tipps
etwas in diese Richtung versuchen, alle Schlüssel zu erfassen und sie für später speichern:
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 );
}
} );
Sie können Zusatztasten testen für folgende Methode verwendet:
/**
* 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);
}
Beispielaufruf:
item.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent keyEvent) {
if(getModifierKeyCode(keyEvent) == SWT.CTRL && keyEvent.keyCode == 'f') { // CTRL + F
// do something
)
}
}