PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Warum funktioniert das repaint() nicht?



BenNavis
13-11-2003, 11:35
Hi Leute, ihr müsste mir bitte mal wieder helfen!

Warum wird hier das drawString immer über die alte Ausgabe geschrieben, anstatt diese vorher zu löschen?

Ich danke euch!

Ben
____
Mein Code:

public class RepaintTest extends JFrame {

public RepaintTest() {
setSize(400, 300);
}

public void paint(Graphics g) {
g.setColor(Color.black);
Calendar now = Calendar.getInstance();

Integer std = new Integer(now.get(11));
Integer min = new Integer(now.get(12));
Integer sek = new Integer(now.get(13));

g.drawString(std.toString() + ":" + min.toString() + ":" + sek.toString(), 50, 50);
}

public void go() {
while(true) {
try {
repaint();
Thread.sleep(1000);
}
catch (InterruptedException e) {
return;
}
}
}

public static void main(String[] args) {
RepaintTest app = new RepaintTest();
app.show();
app.go();
}
}

peschmae
13-11-2003, 11:58
oh mann, da hab ich echt lange dran gehabt. Aber jetzt ists klar :D

du musst in deiner RepaintTest-Klasse, wenn du die Paint-Methode überschreibst natürlich dann auch die Paint-Methode der JFrame-Klasse aufrufen.

also deinem Paint(Graphics g) als erstes noch ein


super.paint(g);

hinzufügen. Dann gehts.

MfG Peschmä

BenNavis
13-11-2003, 20:24
Peschmae, Du hast mich (mal wieder) gerettet! :)

Könnest Du mir evtl. noch ein bißchen genauer erklären, warum ich innerhalb der paint() ein super.paint(g) aufrufen muss? Es läuft zwar, aber ich würde auch gern verstehen, warum...

Gruß,

Ben

Lin728
14-11-2003, 06:41
Hab dein Beispiel nicht ausprobiert, aber falls es der Effekt ist, dass du einen alten Schriftzug hast, und der neue einfach drüberschreibt, und der alte ist darunter noch immer sichtbar, kann ichs dir erklären.

Die methode drawString() zeichnet nur zeichen an einer bestimmtest (angegebenen) Stelle, weiters tut es nichts. Wenn du dir jetzt ein Component vorstellst, in das ein Text gezeichnet worden ist, und da wird ein Text drübergeschrieben, sieht man den alten natürlich noch immer.....

Die paint-mtehode von der superklasse aufzurufen ist die eine möglichkeit, du könntest aber auch z.B. ein fillRect mit der backgroundfarbe über den alten Text zeichnen (gebräuchlicher..).

bischi
14-11-2003, 07:42
Wenn du paint() über repaint() aufrufst, wird der Hintergrund nicht gelöscht. Rufst du paint() direkt über paint(Graphics) auf, so wird zuerst der Hintergrund gelöscht, bevor neugezeichnet wird.

MfG Bischi

BenNavis
14-11-2003, 15:00
Danke, habs begriffen!

Gruß,

Ben