2017-04-17 14 views
0

私はNokiaのスネークゲームを作っていました。私はすでにフレームとすべてを作り、すでに私の恋人を書いています。現在、自分のキー(左、右、上、下など)を使ってアクションを実行できるように何かをやっていました。Javaの主要アクションリスナーSwing

私はJFrameを拡張し、アクションリスナを実装するFrameという名前のクラスを作成しました。スタックオーバーフローで見たどこかでキーを押している間にコードを実行するためにキーリリースされた関数にコードを書く必要があります。

しかし、キーを押しても何も起こりませんでした。ここで

は私のJavaコードです:

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; 
    } 
} 

答えて

2

、どこかに私が押している間、私は..私のコード実行になるようにキーリリース機能で自分のコードを記述する必要がスタックオーバーフローで見ましたキー...

私はあなたがここでそのアドバイスを持っているとは思わない。

Key Bindingsを使用することを常にお勧めします。基本情報については、How to Use Key BindingsのSwingチュートリアルのセクションを読んでください。

Motion Using the Keyboardには、Key Bindingsを使用してコンポーネントをアニメートする実際の例が含まれています。