JButton: ActionEvent beim Tastenklick NICHT auslösen.

barsiq

Mitglied
Hallo,

weiß denn jemand Rat, wie ich bei (fokusierten) JButtons die Auslösung der Action durch das Drucken der Leertaste- bzw. Eingabetaste unterdrücke?
Das Project ist schon größer, und alle ActionListener auf MouseListener umstellen wäre sicher doof.
 
Moin,

weiß denn jemand Rat, wie ich bei (fokusierten) JButtons die Auslösung der Action durch das Drucken der Leertaste- bzw. Eingabetaste unterdrücke?
Das Project ist schon größer, und alle ActionListener auf MouseListener umstellen wäre sicher doof

wenn ich Dich richtig verstehe, solltest Du es mit einem KeyListener versuchen !

BTW: warum eigentlich MouseListener, wenn Du TastenEvents abfragfen willst :confused:

Ich nutze das immer wie folgt:
Java:
// einem Button einen KeyListener zuweisen - hier über einen Adapter !
jButtonAnnehmen.addKeyListener( new dlgAcceptRejectAlarm_jButtonAnnehmen_keyAdapter(this) );

...

// die Adapterklasse
class dlgAcceptRejectAlarm_jButtonAnnehmen_keyAdapter
    extends java.awt.event.KeyAdapter 
{
    DlgAcceptRejectAlarm adaptee;

    dlgAcceptRejectAlarm_jButtonAnnehmen_keyAdapter( DlgAcceptRejectAlarm adaptee ) 
    {
        this.adaptee = adaptee;
    }
  
    public void keyPressed( KeyEvent e ) 
    {
        adaptee.jButtonAnnehmen_keyPressed(e);
    }
}

...

// die ausprogrammierte keyPressed-Methode
void jButtonAnnehmen_keyPressed( KeyEvent e ) 
{
	switch( e.getKeyCode() ) 
	{
		case KeyEvent.VK_SPACE:
			break;	// mache nix
		case KeyEvent.VK_ENTER:
			break;	// mache nix
		case KeyEvent.VK_F10:
			// mache hier irgendwas ...
			break;
	}
}

Gruß
Klaus
 
wenn ich Dich richtig verstehe, solltest Du es mit einem KeyListener versuchen !

Nicht so.

Buttons, Actions - es ist ja alles fertig und im Betrieb. Allerdings seit wir einen Kunden haben der Tastatur einsetzt (Normalfall bei uns - Touchscreen), meckert er, beim (zufälligen) Klick auf Leertaste/Eingabe würden die fokusierten Buttons Action auslösen.

Ich dachte eher an eine InputMap für die Button-Parentklasse.
Anfassen eines jeden Listener kommt bei dem Volumen nicht in Betracht. ActionListener sollen ActionListener bleiben. Nur die Auslöseregeln sollen sich ändern.
 
Hallo,

vielleicht hilft dir die Methode getModifiers() des ActionEvents weiter. Sie liefert bei einem Mausklick (wenn keine zusätzlichen Tasten gedrückt wurden) immer einen konstanten Integer-Wert 16 zurück. Wenn du jedoch mit der Leertaste beispielsweise den Klick auslöst, liefert getModifiers() den Wert 0. Somit könntest du das ja über ein if-else-Konstrukt abfangen.

Ich hoffe, ich konnte dir ein wenig weiterhelfen.

Gruß,

Ben
 
Zurück