2017-04-17 2 views
0

Ich machte ein Nokia Snake-Spiel. Ich habe den Rahmen und alles schon gemacht und schon meinen Algo geschrieben. Momentan habe ich etwas gemacht, um mit meinen Tasten Aktionen ausführen zu können (zB links, rechts, oben, unten).Key Aktion Hörer in Java Swing

Ich habe eine Klasse namens Frame, die JFrame erweitert und implementiert Aktion Listener, irgendwo sah ich auf Stack Overflow, dass ich meinen Code in Schlüssel freigegebene Funktion schreiben muss, so dass mein Code ausgeführt wird, während ich die Taste drücken.

Aber als ich die Tasten gedrückt habe, ist nichts passiert.

Hier mein Java-Code ist:

import java.awt.Color; 
import java.awt.GridLayout; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 

public class Frame extends JFrame implements KeyListener { 

private static final int BOARD_SIZE = 51; 
private static final int FRAME_SIZE = 700; 
private static final Color SNAKE = Color.GREEN; 
private static final Color BOARD = Color.WHITE; 
private static final Color FOOD = Color.BLUE; 

private static enum DIRECTION { 
    right, left, up, down; 
} 

private static DIRECTION curr = DIRECTION.right; 

public Frame() { 
    super.setTitle("<<SNAKE GAME>>"); 
    super.setSize(this.FRAME_SIZE, this.FRAME_SIZE); 
    GridLayout layout = new GridLayout(this.BOARD_SIZE, this.BOARD_SIZE); 
    super.setLayout(layout); 
    int val = this.randomNum(this.BOARD_SIZE * this.BOARD_SIZE - 7); 
    int count = 0; 
    for (int i = 0; i < this.BOARD_SIZE; i++) { 
     for (int j = 0; j < this.BOARD_SIZE; j++) { 
      JButton btn = new JButton(); 
      super.add(btn); 
      this.buttons[i][j] = btn; 
      if (i == this.BOARD_SIZE/2 + 1 && j > this.BOARD_SIZE/2 - 5 
       && j <= this.BOARD_SIZE/2 + 6) { 
       this.snakeLL.snake.AddFirst(btn); 
       btn.setBackground(this.SNAKE); 
      } else if (count == val) { 
       btn.setBackground(FOOD); 
       count++; 
      } else { 
       btn.setBackground(this.BOARD); 
       count++; 
      } 
     } 
    } 
    super.addKeyListener(this); 
    super.setResizable(false); 
    super.setVisible(true); 
} 

@Override 
public void keyTyped(KeyEvent e) { 
} 

@Override 
public void keyPressed(KeyEvent e) { 
} 

@Override 
public void keyReleased(KeyEvent e) { 
    int key = e.getKeyLocation(); 
    if (key == KeyEvent.VK_UP) { 
     this.curr = DIRECTION.up; 
    } 
} 

Antwort

2

, irgendwo sah ich auf Stack-Überlauf, die ich brauche, um meinen Code in Taste losgelassen Funktion zu schreiben, um .. zu meinen Code zum Laufen zu bringen, während ich die Taste Schlüssel ...

Ich glaube nicht, dass Sie diesen Rat hier bekommen haben.

Wir empfehlen immer, dass Sie Key Bindings verwenden sollten. Lesen Sie den Abschnitt des Swing-Tutorials unter How to Use Key Bindings für grundlegende Informationen.

Sie können auch Motion Using the Keyboard auschecken, die ein funktionierendes Beispiel für die Verwendung von Key Bindings enthält, um eine Komponente zu animieren.