Canvas löschen
-
Ich habe eine Class von Canvas erben lassen um eine eigene Zeichen Fläche zu haben
Es soll eine Beliebige anzahl vom kreisen gedruckt werden deren Koordinaten in einem array über geben werden.
Ich habe die Paint methode Passend überladen .
wenn ich jetzt aber repaint ausführe werden nur die neuen punkte hinzu gezeichnet die Alten sollen aber verschwindenimport java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; public class MyCanvas extends Canvas { private int[] X; private int[] Y; private int Stratch = 2; public MyCanvas(int[] x, int[] y) { System.out.println("Konstruktor"); X = x; Y = y; } public MyCanvas() { } public void paint(Graphics g) { for (int i = 0; i < X.length; i++) { System.out.println("PARAM" + Y[i] + " " + X[i]); g.drawOval(X[i] * Stratch, Y[i] * Stratch, 10, 10); System.out.println("gezeichnet"); } } void reset(int[] x, int[] y) { this.X = x; this.Y = y; } }
Was muss Ich tun danke für eure Hilfe
-
mit clearRect
http://download.oracle.com/javase/6/docs/api/java/awt/Graphics.html#clearRect(int, int, int, int)
-
Am besten übergibst du eine ArrayList mit Objekten, die gezeichnet werden sollen. Wenn nun neue Rechtecke gezeichnet werden sollen, so überschreibst du einfach die ArrayList.
Wenn einzelne Rechtecke nicht mehr gezeichnet werden sollen, einfach aus der ArrayList löschen.*Edit
Ups, das machst du ja bereits (fast) so wie ichs oben beschrieben habe.
Also was ist das Problem? Die alten Rechtecke werden auch nach dem repaint noch gezeichnet, sollten es aber nicht?
Wenn du repaint() auf das das richtige Objekt aufrufst sollte das aber passieren. Wo und wie rufst du denn das repaint() auf?
Du solltest aber lieber Swing und nicht AWT verwenden. AWT ist ziemlich veraltet.
-
strictfp schrieb:
mit clearRect
http://download.oracle.com/javase/6/docs/api/java/awt/Graphics.html#clearRect(int, int, int, int)
oder super.paint() aufrufen
icarus2 schrieb:
Am besten übergibst du eine ArrayList mit Objekten, die gezeichnet werden sollen. Wenn nun neue Rechtecke gezeichnet werden sollen, so überschreibst du einfach die ArrayList.
Wenn einzelne Rechtecke nicht mehr gezeichnet werden sollen, einfach aus der ArrayList löschen.*Edit
Ups, das machst du ja bereits (fast) so wie ichs oben beschrieben habe.
Also was ist das Problem? Die alten Rechtecke werden auch nach dem repaint noch gezeichnet, sollten es aber nicht?
Wenn du repaint() auf das das richtige Objekt aufrufst sollte das aber passieren. Wo und wie rufst du denn das repaint() auf?
Du solltest aber lieber Swing und nicht AWT verwenden. AWT ist ziemlich veraltet.lol
-
gastantwort schrieb:
lol
Ja... man sollte keine Beiträge schreiben, wenn man gerade mal 5min ausm Bett raus ist und am Abend vorher lange weg war ^^