Tak jak w temacie. Próbowałem na samym JFrame działa KeyListener, ale jak dodam i usunę z niego (przez remove()) JPanel, to już nie reaguje na Eventy. Co może to powodować?
Dobra, na prośbę [losowa nazwa] dorzucam trochę kodu:
class Menu extends JPanel
w konstruktorze tworzę JButton, dodaje MouseListenera do niego i dodaje do JPanel, a cały panel do JFrame:
w mousePressed() usuwam ten panel z JFrame (właśnie tutaj nie jestem pewien, czy to jest przyczyna, no bo przecież usuwam to, a dalej z tego chce korzystać, nie wiem, może tutaj jest coś źle).
mThis = this;
mPlayButton = new JButton("Play Snake");
mPlayButton.setLocation(200, 200);
mPlayButton.setSize(200, 200);
mPlayButton.enable();
mPlayButton.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
// remove menu panel
mJFrame.remove(mThis);
Play play = new Play(mJFrame, mScoreboard, mGameState
, mWindowDimension);
play.go();
// free memory
play = null;
System.gc();
mGameState.menu = false;
// bring back menu
mJFrame.add(mThis);
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
});
this.add(mPlayButton);
mJFrame.add(this);
class Play extends JPanel implements KeyListener
w konstruktorze dodaje KeyListener do JFrame i wtedy on nie reaguje na klawiaturę:
// *add keyListener
mJFrame.addKeyListener(this);
Dobra, w końcu znalazłem do tego rozwiązanie. Banalne, ale dla mnie, jako początkującego, było trudno na to wpaść :P.
Nikt mi nie pomógł, szkoda:
Błąd polega na tym, że odpalam grę w wątku AWT-Event-Queue, dlatego aplikacja nie przyjmuje żadnych zdarzeń.