Swing Focus für Buttons deaktiviert --> keine Reaktion mehr auf Tastendrücke

Miriam90

Mitglied
Hallo,

ich programmiere gerade ein Snake und es läuft auch soweit ganz gut. Als letztes habe ich hinzugefügt, dass man das Spiel über einen Tastendruck pausieren kann. Zunächst wollte ich dafür das Leerzeichen nehmen. Dieses wählte allerdings meinen Button "Spiel starten" aus, da dort automatisch der Focus drauf war. Ich habe als vorübergehende Lösung das P als Taste für die Pause genommen, habe dann aber trotzdem mal herumprobiert, wie ich den Focus wegbekomme.

Über
Java:
buttonStart.setFocusable(false);
scheint das zu funktionieren. Ich habe die Methode für alle meine 3 Buttons angewendet. Und jetzt das Problem: Dadurch reagiert der ActionListener plötzlich nicht mehr auf Tastendrücke!

Ist es etwa eine Voraussetzung für den ActionListener, dass es einen Focus gibt? Oder gibt es eine andere Ursache?

Wenn sich das so nicht beantworten lässt, dann kann ich auch noch Code posten, aber vielleicht ist ja schon jemandem auf den ersten Blick ein Zusammenhang bekannt.

Ich bin für jeden Hinweis dankbar!

Miriam
 

André Uhres

Top Contributor
Über
Java:
buttonStart.setFocusable(false);
scheint das zu funktionieren. Ich habe die Methode für alle meine 3 Buttons angewendet. Und jetzt das Problem: Dadurch reagiert der ActionListener plötzlich nicht mehr auf Tastendrücke!

Hallo Miriam,

herzlich willkommen bei "java-forum.org"!

Die Mnemonics müssten eigentlich weiterhin funktionieren. Beispiel:
Java:
btPause.setMnemonic(KeyEvent.VK_P);

Gruß,
André
 

hellmy

Mitglied
Das Problem scheint mir, dass jetzt die Buttons an sich nicht mehr fokusierbar sind.

How to Use the Focus Subsystem (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Other Swing Features)
steht in der ersten Zeile:
Many components — even those primarily operated with the mouse, such as buttons — can be operated with the keyboard. For a key press to affect a component, the component must have the keyboard focus.


Probier mal die Buttons entsprechend dem Kontext auf nicht fokusierbar zu setzten, dann sollte mit der Leertaste immer der entsprechende Button angesprochen werden
 

Miriam90

Mitglied
Hallo André, Hallo hellmy,

Danke für die schnellen Antworten und frohe Weihnachten! ;)

@Andre
Was sind Mnemonics? Mein Code für die Tastendrücke sieht aus wie folgt (und hatte ja auch funktioniert, bevor ich allen Buttons den Fokus weggenommen habe):
Java:
	public class MyKeyAdapter extends KeyAdapter{
		@Override
	    public void keyPressed(KeyEvent e) { //Tastendrücke
			if (game!=null){
			    if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
			    	keystrokes.add("right");		    	
			    }
			    if (e.getKeyCode() == KeyEvent.VK_DOWN) {
			    	keystrokes.add("down");
			    }		    
			    if (e.getKeyCode() == KeyEvent.VK_LEFT) {
			    	keystrokes.add("left");	
			    }
			    if (e.getKeyCode() == KeyEvent.VK_UP) {
			    	keystrokes.add("up");
			    }		    
			    if (e.getKeyCode() == KeyEvent.VK_SPACE) {	   		    				    	
			    	if (game.paused==false){		    		
		    		   synchronized (game) {
		    			   game.pause();
		    		   }
			    	}
			    	else{
			    		synchronized (game) {
			    			game.proceed();
						}
			    	}	
			    }
			}
		}
	}

Beim initialisieren meines Frames, gebe ich dann allen Componenten den Adapter mit:
Java:
buttonStart.addKeyListener(new MyKeyAdapter());

Wo würde ich dort jetzt ein Mnemonic verwenden?

@hellmy
Ich bin nicht sicher, ob meine Frage klar geworden ist. Ich möchte ja gerade nicht, dass die Buttons durch Leerzeichen angesprochen werden. Wird in diesem Tutorial nicht nur gezeigt, wie man den Focus auf die gewünschte Komponente bringt? Oder übersehe ich die Stelle, an der erläutert wird, wie man den Focus wegnimmt (ohne dabei seine anderen Tastendrücke zu zerschießen)?
 

André Uhres

Top Contributor
Der "Mnemonic" eines Buttons ist die Taste, die, wenn sie mit dem Look and Feel "mouseless modifier" (in der Regel Alt) kombiniert wird, den Button aktiviert, falls der Fokus irgendwo innerhalb des Fensters ist, das diesen Button beherbergt.

Tastatur Ereignisse werden durch die Komponente mit dem Tastaturfokus ausgelöst, wenn der Benutzer Tasten auf der Tastatur drückt oder sie loslässt. Wenn durch setFocusable(false) kein Tastaturfokus mehr möglich ist, kann auch kein Tastatur Ereignis mehr ausgelöst werden.

In Deinem Code wird übrigens kein "ActionListener" benutzt, den Du oben beschreibst.

Gruß,
André

PS: mit [c]btPause.setMnemonic(KeyEvent.VK_P);[/c] würde z.B. der ActionListener des Buttons "btPause" aktiviert werden, wenn Du Alt+P drückst.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
K JavaFX Focus Listener für gesamte Scene AWT, Swing, JavaFX & SWT 1
G Force Focus für JButton AWT, Swing, JavaFX & SWT 2
A Focus für JApplet AWT, Swing, JavaFX & SWT 7
L Focus für KeyListener auf verschiedene Panels AWT, Swing, JavaFX & SWT 2
B Focus für Textfeld AWT, Swing, JavaFX & SWT 5
E Focus auf titledborder AWT, Swing, JavaFX & SWT 8
B JavaFX TextInputDialog: Focus auf Eingabefeldinhalt setzen und nach OK Inhalt leeren AWT, Swing, JavaFX & SWT 5
A JPanel austauschen und Focus geben AWT, Swing, JavaFX & SWT 3
xYurisha Gui Focus von JTextField weglenken AWT, Swing, JavaFX & SWT 6
O Focus zwischen Chat und Spiel wechselns AWT, Swing, JavaFX & SWT 3
T bekomme keinen Focus auf JTextField AWT, Swing, JavaFX & SWT 3
fLooojava JButton [Focus) AWT, Swing, JavaFX & SWT 4
C JOptionPane.showConfirmDialog() -> Focus auf NEIN -> Enter gibt YES_OPTION zurück AWT, Swing, JavaFX & SWT 6
T SWT Button soll nur sichbar sein,wenn im Textfeld der Focus ist AWT, Swing, JavaFX & SWT 4
B Swing JTextfeld bekommt nur jedes Zweite mal Focus AWT, Swing, JavaFX & SWT 11
E JTextPane Focus AWT, Swing, JavaFX & SWT 1
D ComboBoxCellEditor Refresh beim Focus AWT, Swing, JavaFX & SWT 4
A Swing Focus der Radio Buttons + text bleibt gleich und gleichzeitige ausgabe zweier Objekte in 1. Fenster AWT, Swing, JavaFX & SWT 3
A Focus Problem AWT, Swing, JavaFX & SWT 4
I focus an ein jdialog geben AWT, Swing, JavaFX & SWT 3
B JInternalFrame Focus setzten geht nicht AWT, Swing, JavaFX & SWT 2
A Swing Focus auf gemalte Component AWT, Swing, JavaFX & SWT 5
H Swing JTextField in JWindow, JWindow bekommt focus zurück? AWT, Swing, JavaFX & SWT 9
M focus subFrame AWT, Swing, JavaFX & SWT 3
lumo SWT Composite Focus AWT, Swing, JavaFX & SWT 2
T disabled Checkbox soll trotzdem Focus bekommen AWT, Swing, JavaFX & SWT 9
C Swing Focus Management AWT, Swing, JavaFX & SWT 3
lumo SWT Table Selection Color +Focus Out AWT, Swing, JavaFX & SWT 14
H Swing Focus bekommen AWT, Swing, JavaFX & SWT 4
D Swing keine Tabellen Zeilen ohne Focus AWT, Swing, JavaFX & SWT 7
Screen Focus Problem , KeyListener, TextField , Key AWT, Swing, JavaFX & SWT 4
L AWT Focus auf Fenster setzen AWT, Swing, JavaFX & SWT 4
H warum kann ich das focus event nicht abfangen ? AWT, Swing, JavaFX & SWT 5
L Swing Input Focus eines JTextFields in einer JList AWT, Swing, JavaFX & SWT 2
A Focus in JTable Cell AWT, Swing, JavaFX & SWT 3
R Focus ermitteln AWT, Swing, JavaFX & SWT 2
C JTable Focus Handling AWT, Swing, JavaFX & SWT 2
Nitram Swing Focus im JFrame AWT, Swing, JavaFX & SWT 10
I Swing Focus Listener bei PComboBox von pswing Erweiterung AWT, Swing, JavaFX & SWT 7
V Swing Problem mit Focus setzen AWT, Swing, JavaFX & SWT 7
thE_29 Swing JTabbedPane Focus von Komponenten außerhalb AWT, Swing, JavaFX & SWT 10
B JTable getselectedrow liefert -1 wenn Focus verloren AWT, Swing, JavaFX & SWT 4
S Versuch den Focus zu klauen detektieren? AWT, Swing, JavaFX & SWT 14
SebSnake JFrame "Focus" erzwingen (wie JOptionPane) AWT, Swing, JavaFX & SWT 3
V JTabbedPane - keine "Focus"-Box auf selektiertem T AWT, Swing, JavaFX & SWT 2
O Focus im GBL steuern. AWT, Swing, JavaFX & SWT 3
K Focus an das JPanel übergeben AWT, Swing, JavaFX & SWT 2
K Focus-Problem AWT, Swing, JavaFX & SWT 9
O TextBoxen Focus über Pfeiltasten steuern AWT, Swing, JavaFX & SWT 3
G Problene mt Focus unter Swing AWT, Swing, JavaFX & SWT 7
G JTable und Focus AWT, Swing, JavaFX & SWT 30
D Beim Starten ein JTextfield Focus geben AWT, Swing, JavaFX & SWT 7
J JTextPane bekommt keinen Focus! AWT, Swing, JavaFX & SWT 3
P TextFeld Focus entfernen AWT, Swing, JavaFX & SWT 2
F Problem mit Actions, TextComponents und Focus AWT, Swing, JavaFX & SWT 2
K Focus mit Mouseclick auf JPanel setzen AWT, Swing, JavaFX & SWT 4
D Focus auf JPanel setzen AWT, Swing, JavaFX & SWT 2
B JTable - Focus - TabTaste AWT, Swing, JavaFX & SWT 2
D Focus in bestimmter Celle in JTable AWT, Swing, JavaFX & SWT 3
B Komponente in JTable bekommt keinen Focus AWT, Swing, JavaFX & SWT 3
M Focus beim öffnen eines neuen JFrames AWT, Swing, JavaFX & SWT 6
O JTextField- Selection / Focus bei nicht editierbaren Feldern AWT, Swing, JavaFX & SWT 2
J Focus auf JFrame AWT, Swing, JavaFX & SWT 3
B im JTree Focus setzen und navigieren AWT, Swing, JavaFX & SWT 3
B JInternalFrame in den Vordergrund rücken + Focus AWT, Swing, JavaFX & SWT 15
D JTable: Focus auf Zelle markiert ihren Text zum editieren AWT, Swing, JavaFX & SWT 2
C Komponente mit Focus bevor JButton-Klick merken. AWT, Swing, JavaFX & SWT 6
L Focus setzen AWT, Swing, JavaFX & SWT 3
G JTabbedPane, Focus, ChangeListener AWT, Swing, JavaFX & SWT 1
B Focus in JOptionPane AWT, Swing, JavaFX & SWT 2
J Focus-Problem bei Vollbildmodus AWT, Swing, JavaFX & SWT 7
A Combobox Focus-Events, Tab in Tabelle AWT, Swing, JavaFX & SWT 7
F Fenster in den Vordergrund aber nicht im Focus AWT, Swing, JavaFX & SWT 21
O Abfrage ob eine bstimmte Komponente den Focus hat AWT, Swing, JavaFX & SWT 4
T JTable Focus auf Zelle setzen AWT, Swing, JavaFX & SWT 3
R Focus durch "tabben" von JTable Zelle auf andere K AWT, Swing, JavaFX & SWT 8
R Focus speeren AWT, Swing, JavaFX & SWT 2
K JList - merkwürdiges Verhalten bei Leertaste (unter Focus) AWT, Swing, JavaFX & SWT 7
W Components Focus mit TAB-Taste VERTIKAL bewegen AWT, Swing, JavaFX & SWT 4
V JTextField Focus Cursor setzen AWT, Swing, JavaFX & SWT 2
D jcolorchooser - lost focus AWT, Swing, JavaFX & SWT 2
R Focus auf bereits geöffnetes Fenster setzen AWT, Swing, JavaFX & SWT 9
O Welche Möglichkeit zum Focus setzen! AWT, Swing, JavaFX & SWT 2
R JMenu copy Focus-Problem AWT, Swing, JavaFX & SWT 2
M Focus einstellen AWT, Swing, JavaFX & SWT 3
G Focus so setzen, daß in einer jTextArea der Cursor blinkt AWT, Swing, JavaFX & SWT 7
G JTable: Rahmen bei Focus um Zelle AWT, Swing, JavaFX & SWT 2
thE_29 Modaler Dialog - close on not focus AWT, Swing, JavaFX & SWT 3
P Focus auf JFrame AWT, Swing, JavaFX & SWT 5
G JOptionPane verliert Focus AWT, Swing, JavaFX & SWT 3
A JTree Problem mit Focus bzw. Selection AWT, Swing, JavaFX & SWT 5
C Focus setzen AWT, Swing, JavaFX & SWT 2
G JTree Focus setzen AWT, Swing, JavaFX & SWT 2
F HILFE!!! Focus-Probleme bei unterschiedlichen Panel's AWT, Swing, JavaFX & SWT 3
Juelin setzen background color für selected Row im Tableview AWT, Swing, JavaFX & SWT 21
Juelin Für Java-Spezialisten AWT, Swing, JavaFX & SWT 4
H JTabel - RowFilter Daten für Berechnung filtern AWT, Swing, JavaFX & SWT 6
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
M Eigene Java Klasse für allgemeine Grafikelemente AWT, Swing, JavaFX & SWT 8
M Vokabelprogram - Schleife für Liste soll schrittweise durchlaufen werden AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben