2017-03-12 2 views
0

이것은 내 코드입니다. 그러나 키를 누를 때 수행 할 작업은 수행하지만 키 수신기가 있습니다. 셰이프는 ActionListener에서 이동해야하지만 키 중 하나를 누르면 아무 것도 수행하지 않습니다.Keylistener가 실행되고 있지 않습니다.

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) 이미 수행 한 방법을 작성합니다.

*이 KeyboardListener

0

수 있습니다 당신은 당신의 프레임에 .addKeyListener해야합니다. 이제까지 프레임을 만든 위치를 다음과 같이 추가해야합니다.

 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); 
관련 문제