Event Handling KeyListener funktioniert nach Restart nicht mehr

Doopy

Mitglied
Hallo zusammen,

ich arbeite derzeit an einem kleinem 2D-Spiel bzw. Applet.
Man bewegt eine Spielfigur mittels Pfeiltasten bis zu ihrem Tod und kann danach einen neuen Versuch starten.
Nun funktioniert der KeyListener nach dem ersten "Play again"-Button-drücken nicht mehr.
Hier ein Auszug aus der Hauptklasse:

AppMain.class
Java:
public void init() {
		setSize(480, 800);
		setFocusable(true);
		
		bg1 = new Background(0, 0, this);
		bg2 = new Background(0, 800, this);
		platformhelper = new PlatformHelper(this);
		platformhelper.createInitialPlatforms();
		spieler = new Spieler(this);
		
		gameKL = new GameKeyListener(spieler);
		addKeyListener(new GameKeyListener(spieler));
		System.out.println("keylisteners_init:"+getKeyListeners());
		
		panel = new AppPanel(this, spieler, platformhelper);
	    panel.setLayout(null);
	    add(panel);
	    this.setContentPane(panel);
	    
	    state = GameState.Running;
	    
	    

	}


[...]


         public void restart() {
		setGameSpeed(-2);
		bg1 = new Background(0, 0, this);
		bg2 = new Background(0, 800, this);
		platformhelper = new PlatformHelper(this);
		platformhelper.createInitialPlatforms();
		state = GameState.Running;
		spieler = new Spieler(this);
		removeKeyListener(gameKL);
		gameKL = new GameKeyListener(spieler);
		addKeyListener(new GameKeyListener(spieler));
		System.out.println("keylisteners_restart:"+getKeyListeners());
		
		panel = new AppPanel(this, spieler, platformhelper);
	    panel.setLayout(null);
	    this.setContentPane(panel);
	    paintComponents(panel.getGraphics());
	}

Wie gesagt, am Anfang klappt es, bis man mit dem Playagain-Button die restart()-Funktion aufruft.
Der Code ist schon etwas hässlich, hab schon ne Menge versucht.


MfG
 

javampir

Bekanntes Mitglied
Hallo,
ich versteh nicht ganz: was ist gamekeylistener? eine eigene klasse, die KeyListener implementiert?
Und was passiert mit gameKL aus Zeile 11? das wird ja nirgends geaddet, trotzdem removst du ihn in 38, und dann machst du nochmal das gleiche, du erstellst gameKL und verwendest dann einen neuen GameKeyListener (den du übrigens nicht removt hast). Erklär das bitte noch mal detailierter.
javampir
 

Doopy

Mitglied
Achja, ja genau, eine Klasse die KeyListener implementiert. Hier ihr Code:

GameKeyListener.class:
Java:
public class GameKeyListener implements KeyListener {

	private Spieler s;
	
	public GameKeyListener(Spieler s) {
		this.s = s;
	}

	@Override
	public void keyPressed(KeyEvent e) {
		System.out.println("key");
		switch (e.getKeyCode()) {
		
		case KeyEvent.VK_LEFT:
			s.moveLeft();
			s.setMovingLeft(true);
		break;

	    case KeyEvent.VK_RIGHT:
	    	s.moveRight();
	    	s.setMovingRight(true);
		break;
		}
	}

	@Override
	public void keyReleased(KeyEvent e) {
         switch (e.getKeyCode()) {
		
		case KeyEvent.VK_LEFT:
			s.stopLeft();
		break;

	    case KeyEvent.VK_RIGHT:
	    	s.stopRight();
		break;
		}
	}

	@Override
	public void keyTyped(KeyEvent e) {
	}

}

Ups, das hab ich voll übersehen :D Muss natürlich so sein:

Java:
gameKL = new GameKeyListener(spieler);
addKeyListener(gameKL);

Geht trotzdem immer noch nicht :/
 

eMmiE

Bekanntes Mitglied
Guck mal nach, ob du das mit addKeyListener(gameKL) auch beim restart() so drin hast

Was gibt er dir beim SysOut aus?

Gruß eMmiE
 
Zuletzt bearbeitet:

Doopy

Mitglied
Ja, hab ich auch geändert, funzt nicht.

Beim SysOut gibt er mir immer verschiedene KeyListener aus, wie es auch sein sollte.
Allerdings ist mir dabei jetzt eben aufgefallen, dass die restart()-Funktion während dem Plattformgenerieren mehrmals aufgerufen wird, und dadurch wieder alles von vorne generiert wird. Hier der Codeausschnitt aus der GameoverScreen.class:

Java:
public void paint(Graphics g) {
		g.drawImage(background, 0, 0, panel);
		System.out.println("DEAD");
		g.setColor(Color.BLUE);
		g.setFont(fontGameover);
		g.drawString("Game Over!", 80, 250);
		g.setFont(fontScore);
		g.drawString("Dein Score: " + String.valueOf(spieler.getDistance()), 140, 400);
		playagain.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.out.println("playagain button");
				m.restart();
			}
		});
		panel.add(playagain);
		

	}
 

Doopy

Mitglied
Okay, ich hab endlich den Fehler gefunden.
Es lag ganz einfach daran, dass ein Button den Fokus hatte und deswegen der KeyListener nicht ansprang ;)
Einfach den Button .setFocusable(false) und jetzt gehts :)
Allerdings frag ich mich immernoch warum die restart()-Funktion mehrmals aufgerufen wird wenn der playagain-Button gedrückt wird...?
 

Doopy

Mitglied
Okay das hat sich jetzt auch geklärt.
Die paint()-Methode des Screens wurde permanent aufgerufen um die Grafiken jeweils neu zu zeichnen, da die Buttons aber auch in der selben Funktion waren, wurden sie einfach zigfach übereinander gelegt ;)

Trotzdem Danke euch allen für die Hilfe!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
C Keylistener funktioniert nicht AWT, Swing, JavaFX & SWT 1
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
S KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 2
N KeyListener funktioniert nicht richitg AWT, Swing, JavaFX & SWT 4
C Swing KeyListener für JPanel funktioniert nicht AWT, Swing, JavaFX & SWT 8
A KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 4
I KeyListener funktioniert nicht! AWT, Swing, JavaFX & SWT 2
A KeyListener funktioniert nicht beim Öffnen von neuem Frame. AWT, Swing, JavaFX & SWT 2
G KeyListener funktioniert nur einmal AWT, Swing, JavaFX & SWT 2
hdi keylistener funktioniert nicht AWT, Swing, JavaFX & SWT 4
S KeyListener funktioniert nicht erwartungsgemäss AWT, Swing, JavaFX & SWT 5
P JTextfield Text durch Keylistener verändern AWT, Swing, JavaFX & SWT 4
N Keylistener & JComboBox AWT, Swing, JavaFX & SWT 5
B Swing JButton mit KeyListener AWT, Swing, JavaFX & SWT 3
Fridolin111 Der KeyListener Löst kein event aus AWT, Swing, JavaFX & SWT 6
B KeyListener auf JFrame reagiert nicht AWT, Swing, JavaFX & SWT 8
N Mit KeyListener ein rechteck zeichnen AWT, Swing, JavaFX & SWT 9
S Swing JPanel nimmt keinen KeyListener an AWT, Swing, JavaFX & SWT 7
P JPanel KeyListener hinzufügen AWT, Swing, JavaFX & SWT 8
B Swing KeyListener auf Container? AWT, Swing, JavaFX & SWT 1
T Event Handling KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 10
K KeyListener ohne JFrame AWT, Swing, JavaFX & SWT 9
A Event Handling Muss ich 'KeyListener' tasuend mal zufügen? AWT, Swing, JavaFX & SWT 7
S mit keylistener frame schliessen AWT, Swing, JavaFX & SWT 8
S Keylistener reagiert bei Buttons nicht. AWT, Swing, JavaFX & SWT 8
R KeyListener in mehreren Panels AWT, Swing, JavaFX & SWT 5
V Tastatur KeyListener für mehrere Buttons AWT, Swing, JavaFX & SWT 1
J JLabel Visible setzen in KeyListener AWT, Swing, JavaFX & SWT 13
X KeyListener AWT, Swing, JavaFX & SWT 0
L KeyListener für JDialog AWT, Swing, JavaFX & SWT 7
Z SnakeGame Schlange per KeyListener bewegen! AWT, Swing, JavaFX & SWT 10
T KeyListener AWT, Swing, JavaFX & SWT 2
GianaSisters JFrame mit JInternalFrames, Keylistener-Problem AWT, Swing, JavaFX & SWT 9
7 KeyListener tastatur temporär blockieren AWT, Swing, JavaFX & SWT 7
7 AWT problem: KeyListener/ test im Label umändern AWT, Swing, JavaFX & SWT 4
B SWT Problem: Wie kann man für jede TableColumn einen eigenen KeyListener registrieren. AWT, Swing, JavaFX & SWT 1
U Mouse + Keylistener AWT, Swing, JavaFX & SWT 12
K ActionListener mit KeyListener AWT, Swing, JavaFX & SWT 7
J JWindow und keylistener AWT, Swing, JavaFX & SWT 1
F JavaFX KeyListener zum Fenster öffnen/schließen AWT, Swing, JavaFX & SWT 9
A Swing KeyEvent mit KeyListener und KeyAdapter kürzer schreiben AWT, Swing, JavaFX & SWT 7
D JTextArea auf KeyListener Command AWT, Swing, JavaFX & SWT 6
C KeyListener AWT, Swing, JavaFX & SWT 5
S KeyListener geht nicht AWT, Swing, JavaFX & SWT 12
C Swing KeyListener in JPanel AWT, Swing, JavaFX & SWT 2
A KeyListener Button wechseln & Programm beenden AWT, Swing, JavaFX & SWT 4
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
H Bild mit KeyListener verschieben AWT, Swing, JavaFX & SWT 2
C JTextField KeyListener AWT, Swing, JavaFX & SWT 6
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
bluerob Fehler bei Wertübermittlung über KeyListener AWT, Swing, JavaFX & SWT 3
E Swing KeyListener implementieren AWT, Swing, JavaFX & SWT 12
P KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 11
M KeyListener richtig implementieren AWT, Swing, JavaFX & SWT 3
T KeyListener AWT, Swing, JavaFX & SWT 4
R KeyListener in JWindow AWT, Swing, JavaFX & SWT 7
T BlueJ KeyListener AWT, Swing, JavaFX & SWT 7
Z KeyListener AWT, Swing, JavaFX & SWT 2
M Swing KeyListener in JTextfield AWT, Swing, JavaFX & SWT 4
VfL_Freak Swing KeyListener, um einen Dialog per ESC zu schließen AWT, Swing, JavaFX & SWT 6
A Keylistener reagiert nicht AWT, Swing, JavaFX & SWT 10
D Problem mit KeyListener AWT, Swing, JavaFX & SWT 2
J KeyListener um auf CTRL-Enter zu reagieren AWT, Swing, JavaFX & SWT 2
L Snake in Java KeyListener Problem AWT, Swing, JavaFX & SWT 30
B "globaler" KeyListener? AWT, Swing, JavaFX & SWT 3
B JTable TableHeader KeyListener AWT, Swing, JavaFX & SWT 4
S Swing KeyListener und JList AWT, Swing, JavaFX & SWT 2
R KeyListener funzt nicht AWT, Swing, JavaFX & SWT 2
X KeyListener AWT, Swing, JavaFX & SWT 4
P KeyListener + Animation AWT, Swing, JavaFX & SWT 2
M Fokus für KeyListener AWT, Swing, JavaFX & SWT 9
V Problem mit KeyListener im Fullscreen-Modus AWT, Swing, JavaFX & SWT 2
M AWT KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 10
C Swing KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 7
K JFrame + KeyListener + Runnable = Fehler AWT, Swing, JavaFX & SWT 3
F Tastenabfrage (KeyListener) AWT, Swing, JavaFX & SWT 2
D KeyListener Problem bei JPanel wechsel AWT, Swing, JavaFX & SWT 2
S Swing JTree mit KeyListener AWT, Swing, JavaFX & SWT 2
L AWT KeyListener, requestFocus und KeyBindings AWT, Swing, JavaFX & SWT 8
E JFrame akzeptiert den KeyListener nicht AWT, Swing, JavaFX & SWT 3
F Swing Problem mit KeyListener||paintComponent() in JFrame AWT, Swing, JavaFX & SWT 12
P Swing KeyListener hört nur manchmal zu AWT, Swing, JavaFX & SWT 2
Screen Focus Problem , KeyListener, TextField , Key AWT, Swing, JavaFX & SWT 4
earlgrey_tea AWT KeyListener bekommt keine Signale AWT, Swing, JavaFX & SWT 3
L Problem mit KeyListener AWT, Swing, JavaFX & SWT 3
D KeyListener-Problem nach dem "Gedrückthalten" einer Taste AWT, Swing, JavaFX & SWT 10
B Swing Keylistener fuer Dialog-Buttons AWT, Swing, JavaFX & SWT 2
B KeyListener Strg+s AWT, Swing, JavaFX & SWT 5
D Globaler Keylistener AWT, Swing, JavaFX & SWT 4
M problem mit keylistener/textarea AWT, Swing, JavaFX & SWT 6
M KeyListener Problem unter Firefox AWT, Swing, JavaFX & SWT 2
L AWT KeyListener, Taste gedrückt halten AWT, Swing, JavaFX & SWT 12
M Komisches Verhalten: JCombobox mit KeyListener AWT, Swing, JavaFX & SWT 13
capgeti SWT KeyListener 2 Tasten Problem AWT, Swing, JavaFX & SWT 3
R KeyListener - welcher Komponente hinzufügen AWT, Swing, JavaFX & SWT 5
Developer_X AWT KeyListener wird nicht ausgeführt! AWT, Swing, JavaFX & SWT 3
N JFrame und KeyListener AWT, Swing, JavaFX & SWT 6
M KeyListener reagiert nach Buttondruck nicht mehr AWT, Swing, JavaFX & SWT 4
A AWT Button verhindert ausführung vom Keylistener AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben