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 verschwinden

    import 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





  • 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 ^^


Anmelden zum Antworten