2014-01-19 2 views
1

화살표 키를 눌러 Java 프레임에서 움직일 수있는 객체를 만들려고합니다. 어떻게 든 내 애니메이션은 아무 것도하지 않고 System.out.println()을 통해 keyCode (잘못된 키를 누르면)를 표시하지도 않습니다.어떻게 든 내 Java 애니메이션은 움직이지 않습니다

내 코드는 다음과 같습니다. 누군가 그것을 살펴보고 어쩌면 스스로 테스트하여 문제가있는 곳을 파악할 수 있을까요? 지금은 시간이 함께 붙어있어 원인 :(당신의 main 방법에서

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.Timer; 


public class GUI extends JPanel implements ActionListener, KeyListener{ 

Timer tm = new Timer(5, this); 
int x = 0, y = 0, velX = 0, velY = 0; 

public GUI(){ 
    tm.start(); 
    addKeyListener(this); 
    setFocusable(true); 
    setFocusTraversalKeysEnabled(false); 
} 

public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    g.setColor(Color.RED); 
    g.fillRect(x, y, 30, 30); 
} 

public void actionPerformed(ActionEvent e){ 
    x = x + velX; 
    y = y + velY; 
    repaint(); 
} 

public void keyPressed(KeyEvent e){ 
    int c = e.getKeyCode(); 

    if(c == KeyEvent.VK_LEFT){ 
     velX = -1; 
     velY = 0; 
    } 
    else if(c == KeyEvent.VK_UP){ 
     velX = 0; 
     velY = -1; 
    } 
    else if(c == KeyEvent.VK_RIGHT){ 
     velX = 1; 
     velY = 0; 
    } 
    else if(c == KeyEvent.VK_DOWN){ 
     velX = 0; 
     velY = 1; 
    } 
    else System.out.println(e.getKeyChar() + " = " + c); 
} 


public void keyReleased(KeyEvent e) { 

} 

public void keyTyped(KeyEvent e) { 

} 

public static void main(String[] args){ 
    GUI t = new GUI(); 
    JFrame jf = new JFrame(); 

    jf.setTitle("Animation"); 
    jf.setSize(600,400); 
    jf.setVisible(true); 
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    jf.add(t); 
} 
} 
+0

을 그럴 수 없어 문제가있는 곳보기 ... 몇 초 전에 코드를 직접 시험해 보았지만 정상적으로 작동합니다. 빨간색 상자가 화살표 키 방향으로 움직입니다. - Eclipse Juno로 테스트했습니다. – XWaveX

답변

1

, setVisible를 호출하기 전에 JFrameJPanel를 추가 나는 매우 감사 할 것입니다 :

public static void main(String[] args){ 
    GUI t = new GUI(); 
    JFrame jf = new JFrame(); 
    jf.add(t); 

    jf.setTitle("Animation"); 
    jf.setSize(600,400); 
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    jf.setVisible(true); 
} 
+0

정말 고마워요. , 이것은 실제로 문제가되는 것 같았습니다. 이제는 완벽하게 작동합니다. 이상한 일입니다. 어제없이. 감사합니다. – Krikke93

+0

@ user3209916 지금과 어제 사이에 코드를 편집하지 않으셨습니까? – patterned

+0

어쨌든 지금은 작동하지 않고 어제 같은 코드로 작업하는 것이 불가능하기 때문에 분명했습니다. 어쨌든, 지금은 다행이다. P – Krikke93

관련 문제