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?

War es hilfreich?

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
        )
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top