Witam,
Jestem początkujący i pisze pierwszą mini grę - węża.
Początkowo stworzyłem klasę Panel dziedziczącą JPanel zawierającą grę, gdzie znajdował się KeyListener i wszystko działało tak jak trzeba. Niestety po stworzeniu klasy Menu dziedziczącej JPanel, gdzie znajdowało się menu z przyciskiem, po którego naciśnięciu przechodzimy do gry wystąpił problem. Gra po naciśnięciu przycisku się uruchamia, jednak nie reaguje już na klawiaturę.
Poniżej istotne fragmenty kodów.
Ramka:
public class Gra extends JFrame{
public Gra(){
super("Gra wąż");
Panel panel=new Panel();
add(panel);
panel.setVisible(true);
pack();
panel.setVisible(false);
Menu menu=new Menu(panel);
add(menu);
menu.setVisible(true);
menu.setFocusable(true);
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setVisible(true);
setBackground(Color.black);
}
}
Menu:
public class Menu extends JPanel implements ActionListener{
Panel panel;
public Menu(Panel panel){
super();
this.panel=panel;
setPreferredSize(new Dimension(400, 420));
setBackground(Color.black);
setLayout(null);
JButton start=new JButton();
start.addActionListener(this);
start.setBounds(125,100,150,50);
start.setBackground(Color.BLUE);
start.setText("START");
start.setFont(new Font("Arial",1,20));
start.setForeground(Color.white);
add(start);
}
public void actionPerformed(ActionEvent e) {
Object zdarzenie= e.getSource();
if(e.getSource()==zdarzenie)
{
setFocusable(false);
setVisible(false);
panel.setFocusable(true);
panel.setVisible(true);
panel.inicjalizacja();
}
}
}
Fragmenty gry:
public class Panel extends JPanel implements KeyListener{
...
public Panel(){
super();
addKeyListener(this);
...
}
...
public void keyReleased(KeyEvent evt) {
int key = evt.getKeyCode();
switch (key){
case KeyEvent.VK_LEFT:
if (poprzedniKierunek!=1)
kierunek=3;
break;
case KeyEvent.VK_RIGHT:
if (poprzedniKierunek!=3)
kierunek=1;
break;
case KeyEvent.VK_DOWN:
if (poprzedniKierunek!=4)
kierunek=2;
break;
case KeyEvent.VK_UP:
if (poprzedniKierunek!=2)
kierunek=4;
break;
}
}
}
Co robię nie tak?