2016-09-14 1 views
1

좋아, Java에서 일하고있어 키를 누를 때 함수를 호출하려고합니다. Keylistener를 사용하고 있지만 왼쪽 화살표 키를 누를 때 Testing 또는 Testing123을 인쇄 할 수 있습니다.Java 구현의 Keylistener입니다.

import java.awt.Color; 
    import java.awt.Graphics; 
    import java.awt.Graphics2D; 
    import java.awt.Image; 
    import java.util.List; 
    import java.awt.RenderingHints; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import java.awt.event.KeyEvent; 
    import java.awt.event.KeyListener; 
    import java.util.ArrayList; 
    import javax.swing.Timer; 
    import javax.swing.JFrame; 
    import javax.swing.JPanel; 

    public class game extends JPanel implements KeyListener{ 

    int level = 1; 
    //Player player = new Player(this); 
    private int frameCount = 0; 
    Player mainPlayer = new Player(); 
    static List<Platform1> level1 = new 

ArrayList();

public game(){ 

} 

public void move(){ 
    //player.move(); 
} 

@Override 
public void paint(Graphics g){ 
    super.paint(g); 
    Graphics2D g2d = (Graphics2D) g; 
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
      RenderingHints.VALUE_ANTIALIAS_ON); 
    g.fillRect(mainPlayer.x, mainPlayer.y, mainPlayer.width, mainPlayer.height); 
    if(level == 1){ 
     for(int i = 0; i<level1.size();i++){ 
      g.fillRect(level1.get(i).x,level1.get(i).y,level1.get(i).width,level1.get(i).height); 
     } 
    } 
    //player.paint(g2d); 
} 

public void timer1(){ 
    int delay = 10; //milliseconds 
     ActionListener taskPerformer = new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
      frameCount++; 
      mainPlayer.updateLocation(); 

      } 
     }; 
     new Timer(delay, taskPerformer).start();; 

try { 
    Thread.sleep(10); 
} catch (InterruptedException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
} 

public static void main(String args[]) throws InterruptedException, Exception{ 
    int Width = 1000; 
    int Height = 600; 
    game game = new game(); 
    JFrame frame = new JFrame("quest Kings"); 
    frame.setSize(Width, Height); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setBackground(Color.green); 
    frame.add(game); 
    frame.setResizable(false); 
    level1.add(0,new Platform1(400,64,128,400)); 
    level1.add(0,new Platform1(400,64,328,200)); 

    //What to do after the program starts 
    while(true){ 
     game.move(); 
     game.repaint(); 
     game.timer1(); 

    } 
} 


    public void keyTyped(KeyEvent e){ 
    } 

    public void keyReleased(KeyEvent e){ 
     //player.keyReleased(e); 
    } 

    public void keyPressed(KeyEvent e){ 
     System.out.println("Testing"); 
     int keyCode = e.getKeyCode(); 
     if (keyCode == KeyEvent.VK_LEFT) { 
      mainPlayer.setDirection(-1); 
      System.out.println("Testing123"); 
     } 
     else if (keyCode == KeyEvent.VK_RIGHT) { 
      mainPlayer.setDirection(1); 

     } 
     else if (keyCode == KeyEvent.VK_UP) { 
      mainPlayer.startJump(); 

     } 
    } 
} 
+0

gui에서 리스너를 어디에 설정 했습니까? –

+1

JPanel에 KeyListener를 추가하지 않았습니다. addKeyListener (this)를 호출합니다. – Bene

+0

감사합니다 Bene frame.addKeyListener (game); 일한 – MickDom

답변

1

당신은 리스너를 설정해야하고, 한 자신의 클래스를 구현, 당신은 this 사용해야합니다

JFrame frame = new JFrame("quest Kings"); 
frame.addKeyListener(this); 

를하거나 생성 된 인스턴스 (이럴 필요를 사용할 수 있지만, 내가해야 코드를 더 확인하십시오)

game game = new game(); 
JFrame frame = new JFrame("quest Kings"); 
frame.addKeyListener(game);