2017-03-12 22 views
0

これは私のコードですが、キーリスナーを持っていますが、キーが押されたときの動作は同じです。シェイプは、ActionListenerのように動きますが、キーの1つを押すと何もしません。キーリストが実行されていない

import java.awt.Graphics; 
    import java.awt.Graphics2D; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import java.awt.event.KeyEvent; 
    import java.awt.geom.Ellipse2D; 

    import javax.swing.*; 


    public class Snake extends JPanel implements ActionListener { 
     Timer t = new Timer(5, this); 
     double x = 0 , y = 0, xVel = 2, yVel = 2; 

     public void paintComponent(Graphics g) 
     { 
      super.paintComponent(g); 
      Graphics2D g2 = (Graphics2D) g; 
      Ellipse2D circle = new Ellipse2D.Double(x, y, 40, 40); 
      g2.fill(circle); 
      t.start(); 
     } 

     public void actionPerformed(ActionEvent e){ 

      if(x < 0 || x >460) 
      { 
       xVel = -xVel; 
      } 

      if(y < 0 || y > 459) 
      { 
       yVel = -yVel; 
      } 
      x += xVel; 
      y += yVel; 
      repaint(); 
     } 

     public void keyPressed(KeyEvent e) //This part of the Code Doesnt seem to be running 
     { 
      int key = e.getKeyCode(); 
      if(key == KeyEvent.VK_DOWN) 
      { 
       yVel = yVel; //There may be something wrong with the way i wrote this 
       xVel = 0; 
      } 
      if(key == KeyEvent.VK_UP) 
      { 
       yVel = -yVel; 
       xVel = 0; 
      } 
      if(key == KeyEvent.VK_RIGHT) 
      { 
       xVel = xVel; 
       yVel = 0; 
      } 
      if(key == KeyEvent.VK_LEFT) 
      { 
       xVel = -xVel; 
       yVel =0; 
      } 
      x+= xVel; 
      y+= yVel; 
      repaint(); 

     } 


    } 

答えて

0

KeyListenerインターフェイスを実装していないかのように見えます。 implements ActionListener, KeyListenerにそれを追加してから、KeyListenerのクラスを登録し、KeyListenerインターフェイスで提供されるメソッドを実装することになります。私はそれを行う方法this link

0

私は現在、同様のプロジェクトに取り組んでいるのKeyListener見ての詳細については、

1)それは、正確な名前がある場合に思い出すことができないのKeyListenerを(実装*)

2)addKeylistener(この)

3)あなたがすでに行っている方法を記述します。

*あなたは、あなたのフレームに.addKeyListenerする必要がKeyboardListener

0

ことがございます。フレームを作成した場所はどこですか?

 JFrame frame = new JFrame(); 
     frame.addKeyListener(new KeyListener() { 

      @Override 
      public void keyPressed(KeyEvent e) { 
       int key = e.getKeyCode(); 
       if(key == KeyEvent.VK_DOWN) 
       { 
        yVel = 2; 
        xVel = 0; 
       } 
       if(key == KeyEvent.VK_UP) 
       { 
        yVel = -2; 
        xVel = 0; 
       } 
       if(key == KeyEvent.VK_RIGHT) 
       { 
        xVel = 2; 
        yVel = 0; 
       } 
       if(key == KeyEvent.VK_LEFT) 
       { 
        xVel = -2; 
        yVel =0; 
       } 
       x+= xVel; 
       y+= yVel; 
      } 

      @Override 
      public void keyReleased(KeyEvent arg0) {  
      } 

      @Override 
      public void keyTyped(KeyEvent arg0) { 
      } 
     }); 
     Snake snake = new Snake(); 
     frame.add(snake); 
     frame.setSize(500, 500); 
     frame.setVisible(true); 
関連する問題