# Canvas löschen



## Guest (21. Mrz 2007)

Hallo zusammen

Kann man den Inhalt einer Canvas löschen bzw. zurücksetzten?


----------



## Wildcard (21. Mrz 2007)

Eine Canvas sollte leer sein wenn neu gezeichnet wird und du in paint nichts mehr zeichnest.
Wenn sie das nicht ist hast du was falsch gemacht und vermutlich irgendwann getGraphics aufgerufen.


----------



## Gast (21. Mrz 2007)

Hol dir das Graphics des Canvas, dieses hat eine Methode clearRect zum löschen eines Rechtecks. Da dann einfach die Bounds des canvas einsetzen, also


```
Graphics.clearRect(0, 0, Canvas.getWidth(), Canvas.getHeight());
```


----------



## Gast (21. Mrz 2007)

Wildcards Aussage stimmt nicht ganz. Wenn ein repaint ausgelöst wird, wird über das, was bereits im Canvas ist, drübergezeichnet. Leer ist das Canvas nur, wenn es vorher garnicht sichtbar war.


----------



## Wildcard (21. Mrz 2007)

Vergiss die Lösung von Gast und mach es richtig.
Die Graphics holt man sich nie.
Man zeichnet in paint und nirgends sonst.


----------



## Gast (21. Mrz 2007)

Wildcard: Klar: Man zeichnet im paint  Ich meinte eigentlich auch, dass er das clearRect() im paint nutzen soll


----------



## Guest (21. Mrz 2007)

was ist jetzt die geeignete Lösung?
bin verwirrt.

Ich rufe getGraphics nie auf, 
die Canvas wird, wie bereits erwähnt, nur überschrieben nicht neu gestaltet. ...


----------



## Wildcard (21. Mrz 2007)

super.paint(g) löscht den Inhalt des Canvas vor jedem zeichnen.


----------



## Guest (21. Mrz 2007)

verstehe ich nicht ganz

zb
 für was steht das g?


----------



## Wildcard (21. Mrz 2007)

Für das Graphics Objekt das du in paint übergeben bekommst.


----------



## Guest (21. Mrz 2007)

sorry, ich habe wirklich keine Ahnung davon, arbeite zum ersten mal damit... und mit java allgemein noch nicht lange...

ich weiss immer noch nicht genau wie ich das machen kann.

was ist dann paint?


----------



## Wildcard (21. Mrz 2007)

Die Methode in der man zeichnet.
Wie zeichnest du denn ohne paint?  ???:L


----------



## Guest (22. Mrz 2007)

sorry bin wirklich sehr neu auf dem Gebite, 
es wird folgendermassen gezeichnet:


```
public class LineChart {
	private Canvas canvas;

	private GC gc;

	public void initialize(final Composite parent) {
		canvas = new Canvas(parent, SWT.FLAT);
		canvas.setBounds(0, 265, 730, 350);
                paintChart();
}
/*
* In dieser Methode wird das Diagramm gezeihnet
*/
public void paintChart() {
       int counter=0;
       int time=0;
       canvas.addPaintListener(new PaintListener() {
			public void paintControl(PaintEvent e) {
				gc = e.gc;
				gc.drawRectangle(20, 15, 700, 300);
	
				for (int i = 0; i <= 10; i++) {
					print = time + "ms";
					gc.drawText(print, 5, 310- counter);
					time += 50;
					counter += 30;
				}
			}
		});
}
/*
* Hier werden die Linie gezeichnet
*/
public void setContent() {
canvas.redraw();                      
//  ------------->>>  Hier sollte die Canvas gelöscht werden  <<< ----------------

 canvas.addPaintListener(new PaintListener() {
			public void paintControl(PaintEvent e) {
				gc = e.gc;
				gc.drawRectangle(20, 15, 700, 300);
	
				for (int i = 0; i <= 10; i++) {
					print = time + "ms";
					gc.drawText(print, 5, 310- counter);
					time += 50;
					counter += 30;
				}
                                
                                gc.drawLine(10,10,400,200);
			}
		});

}
```

Also wie und wo kann ich das genau ausführen das die Canvas gelöscht wird??


----------



## Wildcard (22. Mrz 2007)

Hättest du nicht ein *klein wenig früher* sagen können das es sich um SWT handelt?  :autsch:  :bloed:


----------



## Guest (22. Mrz 2007)

*Sorry*  

habe gar nicht daran gedacht, das dies nicht klar sein könnte . . . 

kann mir trotzdem jemand helfen?


----------



## Guest (22. Mrz 2007)

hat niemand eine Idee?


----------

