KeyListener Problem

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo !

Ich habe ein kleines Problem.

Ich hab ein kleines Spiel programmiert und zur Steuerung einen KeyListener benutzt, es funktioniert alles wunderbar. Nun wollte ich in einem zusätzlichen Panel ein paar Buttons hinzufügen, für kleine Operationen.

Sobald ich aber einen JButton hinzufüge, reagiert der KeyListener nicht mehr.

Gezeichnet wird in einem JPanel, welches in einem JFrame hinzugefügt wurde.

Den KeyListener hab ich dem JFrame hinzugefügt, liegt daran das Problem ?

Sobald ich einen JButton im 2. Panel erstelle funktioniert der KeyListener nicht mehr, kann mir bitte vielleicht jemand helfen oder einen Tipp geben ? 🙁 versuch schon seit stunden das problem zu lösen
 
Der Frame ist nur ein Container, mehr sollte er nicht tun.
Dein Spiel zeichnest du in einem JPanel oder einer JComponent. Selbige wird auf focusable gesetzt und bekommt mit requestFocusInWindow den Fokus.
Alle anderen Componenten sollten entweder nicht fokusierbar sein, oder du musst dafür sorgen das dein Panel den Fokus wieder zurück bekommt.
Denn:
Nur der Fokus-Owner erhält KeyEvents.
 
Hallo !

Danke !! 🙂 Ja das Spiel wird in einem JPanel gezeichnet, und JFrame dient nur als Container.

Nur eine Frage noch dazu, ist es falsch den KeyListener dem JFrame hinzuzufügen, und in der Main Klasse zu implenetieren (Wo auch der JFrame erstellt wird)?

Macht man das Normalerweise im Objekt welches bewegt werden soll (Player) , oder in der Klasse wo gezeichnet wird ??
 
Habs jetzt versucht mit setFocusable und request... aber trotzdem reagiert der KeyListener nicht, entwerder überseh ich irgendwas oder es liegt daran das der KeyListener in der Main klasse implementiert ist..

Wenn ich den JPanel worauf gezeichnet wird auf focusable setzte und den request mach, dann ist der JButton beim Start nicht automatisch markiert. Also die methoden machen etwas
 
Sry für den dreifach post

Aber ich habs jetzt anders gelöst, ich hab einfach den JButton mit setFocusable(false) gesetzt, jetzt funktionierts. Aber es müsste doch auch umgekehrt gehen (JPanel auf true setzten und request)

Danke für die Hilfe ! 🙂 Trotzdem würd ich gern noch wissen ob das jetzt so normalerweise gemacht wird mit dem KeyListener, oder ob man den in der Spielerklasse implementieren sollte.

Vielen dank nochmal für die rasche hilfe
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben