2014-01-19 6 views
1

Я пытаюсь сделать подвижный объект в кадре Java, нажимая клавиши со стрелками. Как-то моя анимация ничего не делает, и не отображает keyCode (если бы я нажимал неправильные ключи) через System.out.println().Как-то моя анимация Java не движется

Вот мой код, я надеюсь, что кто-то сможет просмотреть его, возможно, проверить его сам и выяснить, где проблема для меня? Я был бы очень благодарен, потому что теперь я застрял с этим в течение нескольких часов :(

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

В вашем методе main добавьте JPanel к JFrame перед вызовом setVisible:

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