2017-06-02 15 views
0

Ich habe ein kleines Spiel mit wenig Rect, die sich bewegen und ich brauche die Graphics von this.update(MyGraphics) in meinem onUpdate Methode aktualisieren tun, die alle 50 millisekonds aufgerufen wird. Aber wenn ich das mache this.update(MyGraphics) alle meine buttons und textfields sind glitched.JFrame (Swing) Update (Grafik) Fehler

Hat jemand eine Idee, wie man es reparieren kann?

Antwort

0

Hier ist eines der Beispiele, wie JPanel durch einen Timer aktualisiert werden kann.

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

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

public class MainClass extends JPanel { 

    static JFrame frame = new JFrame("Oval Sample"); 
    static MainClass panel = new MainClass(Color.CYAN); 
    static Color colors[] = {Color.RED, Color.BLUE, Color.GREEN, Color.YELLOW}; 
    static Color color; 
    static int step = 0; 

    public MainClass(Color color) { 
     this.color = color; 
    } 

    final static Timer tiempo = new Timer(500, new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
//   paintComponent(); 
      System.out.println("Step: " + step++); 
      if (step % 2 == 0) { 
       color = Color.DARK_GRAY; 
      } else { 
       color = Color.BLUE; 
      } 
      panel.repaint(); 
     } 
    }); 

    @Override 
    public void paintComponent(Graphics g) { 
     int width = getWidth(); 
     int height = getHeight(); 
     g.setColor(color); 
     g.drawOval(0, 0, width, height); 
    } 

    public static void main(String args[]) { 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLayout(new GridLayout(2, 2)); 
     panel = new MainClass(colors[2]); 
     frame.add(panel); 
     frame.setSize(300, 200); 
     frame.setVisible(true); 
     tiempo.start(); 
    } 
} 
+0

Sie sollten 'paintComponent (...)' überschreiben. – camickr

+0

Dies funktioniert nicht, weil die Paint-Methode nur aktualisiert wird, wenn ich auf die nächste runde Schaltfläche klicke // Ich interagiere mit dem Jpanel, aber ich möchte, dass es ohne mich aktualisiert –

+0

Es löste mein Problem nicht, also würde ich nein sagen –

0

, wenn ich diese this.update tun (MyGraphics) alle meine Tasten und Textfelder sind glitched.

Nicht direkt update(...) aufrufen. So wird kein Custom Painting gemacht.

Stattdessen, wenn Sie benutzerdefinierte Sie malen Sie die paintComponent(...) Methode des JPanel außer Kraft setzen:

@Override 
protected void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 

    // add your custom painting here 
} 

Ich habe ein kleines Spiel mit wenig Rect, die

bewegen Wenn Sie Animation wollen Dann sollten Sie eine Swing Timer verwenden, um die Animation zu planen. Wenn dann der Timer ausgelöst wird, rufen Sie eine Methode für Ihre benutzerdefinierte Klasse auf, um die Position des Rechtecks ​​zu ändern, und rufen dann repaint() auf. Dadurch wird das Panel neu gezeichnet.

Lesen Sie die Swing Tutorial. Es gibt Abschnitte auf:

  1. Performing Benutzerdefinierte Gemälde
  2. Wie Swing-Timer verwenden

Ihre begann mit grundlegenden Beispiele zu erhalten.