Problem mit BufferStrategy

Kai008

Erfahrenes Mitglied
Ich hoffe dass es hier her gehört, da es ein Bestandteil von JFrame ist, wenn nicht dann bitte nicht böse sein zeja bzw. Thomas.

Also, bisher habe ich immer so gebuffert, dass ich die update(java.awt.Graphics g) überschrieben habe. Darin hat er als Klassenvariable ein Bild erstellt/gespeichert, dem Inhalt der Paint daraufgezeichnet und dieses dann als einziges gezeichnet.
Ging gut, nur dass er mittlerweile relativ lange braucht, da er dem Inhalt von 2 Listen zeichnen muss. Deshalb ist ab und zu schon mal ein "flimmern" durchgekommen, also man hat einen kurzem Zeitraum dem weißen Screen durchgesehen.
Also bin ich jetzt mal auf BufferStrategy umgestiegen. In der main() habe ich folgende Zeile hinzugefügt:

jframe.createBufferStrategy(4);

und in der Klasse, die zeichnet, wurde aus

Java:
public void run(Variables v, JFrame jframe)
{
	Graphics g = jframe.getGraphics();

	MUC_Variables variables = (MUC_Variables) v;

	this.paintRahmen(variables, g, jframe);
	this.paintTerrain(variables, g, jframe);
	this.paintUnits(variables, g, jframe);
	this.paintCursor(variables, g, jframe);
	this.paintCurrentUnitInfos(variables, g, jframe);
}

Java:
public void run(Variables v, JFrame jframe)
{
	BufferStrategy b = jframe.getBufferStrategy();
	Graphics g = b.getDrawGraphics();
	MUC_Variables variables = (MUC_Variables) v;

	this.paintRahmen(variables, g, jframe);
	this.paintTerrain(variables, g, jframe);
	this.paintUnits(variables, g, jframe);
	this.paintCursor(variables, g, jframe);
	this.paintCurrentUnitInfos(variables, g, jframe);

	b.show();
}

Eigendlich das mit dem Bildern ganz hervorragend, ich habe bis jetzt nichts durchgesehen.
Aber ich verwende auch die Methode drawString von Graphics, und da happert es ein wenig. Leider zeigt er mir diese sehr oft nicht an. Von 20 repaints vielleicht 1 mal, also es flimmert auch nur kurz auf.

Kann mir wer bitte sagen woran das liegen könnte?
 
Zuletzt bearbeitet:
hi Kai008,
ich bin mir nicht ganz sicher ob ich da richtig liege, aber ich nehme an, Du hast einen JFrame (-> benutzt also Swing) und möchtest etwas darauf malen.
Hmmm also ich mach das immer so, dass ich ein JPanel ableite und die paintComponent() nach meinen Bedürfnissen überschreibe.
das JPanel wird dann wie sonst auch in das ContentPanel vom JFrame gepackt.
DoubleBuffering mach Swing, sofern man es nicht ausschaltet, automatisch (Wenn ich mich nicht irre schon seit Java1.3).

Gibt es für Dich Gründe direkt in einem JFrame zeichnen zu wollen/müssen? wenn ja welche sind es?

mfg

Takidoso
 
Zurück