Flackern des Bildes..JPanel/repaint()

girl2005

Erfahrenes Mitglied
Hallo ,

ich habe ein JPanel erstellt. Das JPanel enthält ein Canvas, die mittels ein Thread ständig neu gezeichnet wird. Das Problem..es flackert die ganze Zeit. hat jemand schon so was gehabt? ich würde mich auf Antworten freuen.
 
Pauschal würde ich sagen, Dir fehlt da das DoubleBuffering. Ich habe mit Canvas bisher nie gearbeitet, aber ich glaube es ist eine Komponente, die nicht wie JPanel automatisch doppelt puffert. Da ich nicht glaube dass man sich damit rumärgern sollte würde ich Grafiken auch mittels JPanels paintComponent()-Methode zeichnen lassen.
Java:
class MyJPanel extends JPanel
{

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

   // .... hier zeichnen was das Zeug hält
   }
}
 
Zuletzt bearbeitet:
genau, nimm das Doublebuffering.

Java:
panel.setDoubleBuffered(true);

wenn es dann immernoch flackert dann überschreib direkt die paint methode des panels

Java:
		new JPanel(true){
			public void paint(Graphics g){
				super.paint(g);
				//Male was ;)
			}
		};

das true bei new JPanel() steht übrigens direkt dafür, dass du auch das Double Buffering eingeschaltet haben möchtest.

LG
Chriz
 
Hallo zusammen,


vielen Danke für die Antworten. Ich habe statt die Canvas ein JPanel verwendet und es funktionniert.
 
Ich habe auch ein Programm wo ich zeichen.

Ich hab mich aber für da JComponent entschieden weil ich es auch bewegen muss. Einige weitere Dinge passieren da auch weiss ich jetz nicht alle (ist schon spät)

Canvas vs. JComponent.

Was ist besser und warum? oder anders gefragt: Wo sind die Einsatzziele der beiden Objekte.
 
Canvas ist ein AWT-Komponent. Man sollte ja AWT und Swing nicht mischen. Zumindest nicht bei der grafischen Oberfläche. Und da ist es wohl so, dass alle Buttons ect. Swing sind, sollte man dafür auch Dinge wie das z. B. ein JFrame und eben JComponent nehmen, wärend wenn man nur zeichnet ein Frame und alle anderen AWT-Sachen reichen. Allerdings habe ich mal gehört, dass AWT veraltert sein soll. Ist mir persönlich aber egal, ich verwende bei Programmen Swing und bei Spielen AWT.
 
Zurück