Hallo,
ich programmiere Snake in Eclipse und es läuft schon, allerdings will ich jetzt Buttons für eine Pause und für das Schließen von dem Spiel auf das Spielfeld hinzufügen. Wenn ich diese jedoch dann dem Frame hinzufüge, reagiert das Spiel nicht mehr auf die Pfeiltasten. Ohne die zwei Buttons reagiert das Spiel immer auf die Pfeiltasten.
ordnung ist eine Boy, spielfeld und zeile ein JPanel.
Außerdem ist die Klasse Gitternetz, in der der obere Code geschrieben steht, von einem JFrame abgeleitet.
Es kann sein, dass dieser Code umständlich ist, aber darum geht es erstmal nicht. In der Hauptklasse schreibe ich ObjektvonFrame.addKeyListener(ObjektvonKeyEventClass); in den Konstruktor.
Warum funktioniert das mit dem KeyListener nur ohne Buttons, mit jedoch nicht?
ich programmiere Snake in Eclipse und es läuft schon, allerdings will ich jetzt Buttons für eine Pause und für das Schließen von dem Spiel auf das Spielfeld hinzufügen. Wenn ich diese jedoch dann dem Frame hinzufüge, reagiert das Spiel nicht mehr auf die Pfeiltasten. Ohne die zwei Buttons reagiert das Spiel immer auf die Pfeiltasten.
Code:
start = new JButton("Starten");
stopp = new JButton("Schließen");
start.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent x){
if(on==true){
on=false;
start.setText("Starten");
}
else{
on=true;
start.setText("Pause");
}
}
});
stopp.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent x){
System.exit(0);
}
});
zeile.add(start);
zeile.add(stopp);
zeile.add(label);
ordnung.add(zeile);
ordnung.add(spielfeld);
setContentPane(ordnung);
pack();
ordnung ist eine Boy, spielfeld und zeile ein JPanel.
Außerdem ist die Klasse Gitternetz, in der der obere Code geschrieben steht, von einem JFrame abgeleitet.
Code:
public class KeyEventClass implements KeyListener{
private int wohin;
public KeyEventClass(){
wohin = 1;
}
public void keyPressed( KeyEvent e ){
switch (wohin){
case 1:
if( e.getKeyCode()== KeyEvent.VK_RIGHT ){
wohin = 3;
}
else if( e.getKeyCode() == KeyEvent.VK_LEFT ){
wohin = 4;
}break;
case 2:
if( e.getKeyCode()== KeyEvent.VK_RIGHT ){
wohin = 3;
}
else if( e.getKeyCode() == KeyEvent.VK_LEFT ){
wohin = 4;
}break;
case 3:
if ( e.getKeyCode() == KeyEvent.VK_UP ){
wohin=1;
}
else if( e.getKeyCode() == KeyEvent.VK_DOWN ){
wohin = 2;
}break;
case 4:
if ( e.getKeyCode() == KeyEvent.VK_UP ){
wohin=1;
}
else if( e.getKeyCode() == KeyEvent.VK_DOWN ){
wohin = 2;
}break;
default : wohin = 1; break;
}
}
public void keyReleased( KeyEvent e ) {}
public void keyTyped( KeyEvent e ) {}
public int getWohin(){
return wohin;
}
}
Es kann sein, dass dieser Code umständlich ist, aber darum geht es erstmal nicht. In der Hauptklasse schreibe ich ObjektvonFrame.addKeyListener(ObjektvonKeyEventClass); in den Konstruktor.
Warum funktioniert das mit dem KeyListener nur ohne Buttons, mit jedoch nicht?