2016-06-02 8 views
0

so das ist mein Quellcode, ich versuche, Stick Mann bewegt sich so zuerst, ich habe versucht, Kopf bewegen zu machen. es funktioniert, aber das Problem ist, dass die Vergangenheit Bewegung und die Reccentt Bewegung zusammenhalten, so geht es wie dieses OOOOOOOOOOO, wenn es so gehen soll OWie aktualisiere ich ein neues Bild auf JFrame? (Ich habe alles versucht, aber es hat nicht funktioniert)

Ich versuchte repaint() validate() updateUI() aber es noch didn 't Arbeit

irgendeine Idee?

package JamesTestPackage; 
    import java.awt.*; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import java.awt.event.KeyEvent; 
    import java.awt.event.KeyListener; 

    import javax.swing.*; 
    public class StickmanUI extends JPanel implements ActionListener, KeyListener{ 
Timer t = new Timer(1,this); 
int x=180; 
int x_vel = 0; 
int y_vel = 0; 
public StickmanUI(){ 
    t.start(); 
    addKeyListener(this); 
    setFocusable(true); 
} 
public void paintComponent(Graphics g) 
{ 
    Graphics2D g2 = (Graphics2D) g; 

    g2.setStroke(new BasicStroke(5)); 

    g2.drawLine(200, 50, 200, 100); // body 

    g2.drawLine(200, 100, 220, 150); // right leg 

    g2.drawLine(200, 100, 180, 150); // left leg 

    g2.drawLine(200, 75, 170, 100); //left arm 

    g2.drawLine(200, 75, 230, 100); //right arm 

    g2.drawOval(x, 10, 40, 40); // head 


} 
@Override 
public void actionPerformed(ActionEvent arg0) { 
    // TODO Auto-generated method stub 
    x= x + x_vel; 
    repaint(); 
} 
@Override 
public void keyPressed(KeyEvent arg0) { 
    // TODO Auto-generated method stub 
    if(arg0.getKeyCode()==KeyEvent.VK_RIGHT) 
     x_vel = 1; 
    else if(arg0.getKeyCode() == KeyEvent.VK_LEFT) 
     x_vel = -1; 

} 
@Override 
public void keyReleased(KeyEvent arg0) { 
    // TODO Auto-generated method stub 
    x_vel =0; 
} 
@Override 
public void keyTyped(KeyEvent arg0) { 
    // TODO Auto-generated method stub 

} 
} 

Antwort

0

Wenn benutzerdefinierte tun die erste Anweisung in der paintcomponent Malerei() Methode sein sollte:

super.paintComponent(g); 

um sicherzustellen, dass der Hintergrund gelöscht wird vor dem Lackieren erfolgt.

Lesen Sie den Abschnitt aus dem Swing-Lernprogramm unter Custom Painting, um weitere Informationen und Arbeitsbeispiele zu erhalten.

+0

danke! es funktioniert jetzt ! aber noch eine Frage, was macht super.paintComponent (g); machen? Ich habe diese immer gesehen, aber nie wirklich verstanden, was es tut –

Verwandte Themen