Hallo…
ich habe ein Applet, auf dem beim Start ein Graph gemalt wird. Das ganze läuft über die paint-Methode und da werden dann Linien für die Kanten und Kreise für die Knoten gemalt.
Jetzt will ich aber einen Button einbauen, der mir auf Knopfdruck den initialen Graph mit einem anderen übermalt. Also, an die Stelle an der der Graph von der Initialisierung steht soll auf Knopfdruck ein neuer Graph gezeichnet werden.
Wie geh ich dabei jetzt vor? Irgendwie is diese Graphics-Klasse abstrakt und deshalb kann ich mir nich an beliebiger Stelle ein Objekt davon erzeugen. Laut Java-Doc hält die Klasse java.awt.Component auch zwei Methoden namens repaint() bereit, aber die erfüllen doch eher so eine Refresh-Funktion, d.h. ich kann darüber nicht wirklich malen. Oder?
Welche Möglichkeiten hab ich?
Hilfe.
Gruß,
Victor
Moin
Jetzt will ich aber einen Button einbauen, der mir auf
Knopfdruck den initialen Graph mit einem anderen übermalt.
Wie ein Action-listener funzt weist du ?
Wie geh ich dabei jetzt vor?
2 Möglichkeiten:
- Du malst direkt (nicht ganz sauber, nicht ganz so wie man’s machen sollte, eigentlich für animationen gedacht)
Du besorgt dir dazu das graphics-Object des Containers deines Graphen(Der container ist das Object desen paint()-Methode du überschrieben hast) mit getGraphics(). Dann muss man allerdings 1. alles selbst machen (den alten Graphen und evtl. überdeckungen von anderen Fenstern löschen, und an der Stelle im action-listener auch noch den neuen Graphen malen) und 2. schnell sein, denn solange der Thread der den actionlistener aufgerufen hat mit malen beschäftig ist reagiert die GUI gar nicht.
- du arbeitest mit repaint().
Das ist schön sauber und fast idotensicher. Dazu musst du in deiner paint()-Methode die 2 graphen malen können. Beim Aufruf der Methode muss dann per if-Abfrage entschieden werden welcher Graph gemalt werden soll (z.b. durch eine int-Variable „graph“). Wird dein Button gedrückt und damit der Actionlistener aufgerufen so musst du die Entscheindungs-variable (graph) auf den 2. Graphen umstellen und repaint() aufrufen. Irgendwann später (so etwa 40ms) wird dann java deine paint()-Methode aufrufen und sie den anderen Graphen neu zeichen lassen.
Laut Java-Doc
hält die Klasse java.awt.Component auch zwei Methoden namens
repaint() bereit, aber die erfüllen doch eher so eine
Refresh-Funktion, d.h. ich kann darüber nicht wirklich malen.
repaint gibt den auftrag später einmal, so zu sagen wenn die JVM Lust hat, paint () aufzurufen. (deshalb kann man da auch eine Zeit angeben)
cu
Jetzt muß ich mich hier aber ma persönlich beim pumpkin bedanken!
Du hast mir mit deinen Antworten hier schon so oft aus der Sch… geholfen. Echt Klasse. Werde bei meinem Paint()-Problem übrigens Möglichkeit 2 probieren. Die hört sich gut an.
Also, Danke nochmal für deine rege Teilnhame hier am Forum. Du schmeisst ja echt den halben Laden.
Gruß,
Victor