Clanintern Clanintern Clanintern

Forum

Öffentliche Foren
FORUM: Spiele & Computer THEMA: Java, Graphics + BufferedImage, repaint
AUTOR BEITRAG
vaest´ark // patrick *circle of confusion*

RANG Master of Clanintern

#1 - 29.10 16:56

Hallo Forum,

ich hab ein Problemchen...
Und zwar musste ich ein Java-Applet schreiben, welches Grafikdarstellung macht.
Ausgangspunkt war ein JSP-Codehaufen (wirklich), der Grafiken in BufferedImage zeichnet und dann als jpg-Dateien wegspeichert. Dort musste ich ansetzen und das Teil so umbauen, das es einerseits die aktuelle Funktion (jpgs generieren) beibehält und andererseits ermöglicht, das ein Java-Applet diese Bilder auch anzeigen kann.
Das sind natürlich grundverschiedene Baustellen, also habe ich einfach eine Klasse gebaut, die auf Stack() aufsetzt (mit einem singleton). Die Klasse hat zur Aufgabe, die generierten BufferedImage-Objekte zu speichern damit ich später im Applet einfach per .pop(), .isEmpty() und ner while()-Schleife durch die Objekte laufen und aufs Applet pinseln kann.
Das ganze sieht dann in der update(Graphics g)-Methode (die paint(Gra...)-Methode ruft update(Gra...) auf) so aus:
code:

            while(!il.isEmpty()){
                tmp = il.pop();
                g.drawImage(tmp, 0, offset, this);
                g.drawLine(0, offset-1, getWidth(), offset-1);
                offset += tmp.getHeight();
            }

Das ganze Konstrukt ist relativ umständlich, aber der einzige Weg, da der Codehaufen konsequent BufferedImage (Interfaces, Ableitungen, ...) verwendet. Das umzubauen wäre in der knappen Zeit nicht möglich gewesen. Nunja.

Nun stehe ich vor dem Problem:
Das ganze funktioniert genau 1x, beim ersten Aufruf. Wird dann das Applet irgendwie bewegt oder verdeckt, fehlt all das (bzw. wenn das Applet verdeckt wurde nur teilweise), was in der Methode gezeichnet wird.

Ich hab jetzt schon rumgegoogelt, allerdings nicht so recht erfolgreich. Ich weiß, das die update()-Methode aufgerufen werden soll, wenn das Applet der Meinung ist, das es neu gezeichnet werden müsste. Funktioniert nicht, oder ich habe etwas übersehen.

Kann mir da einer helfen? Das wäre echt Prima!

Danke!

.pat


(edit)
Ich teste im Appletviewer, im Browser dauert das zu lange, hat aber die selben Effekte (auch mit verschiedenen Browsern).

(edit2)
Die ganze Bildgenerierungsgeschichte und Listenfüllung findet in init() statt, falls das was zur Sache tut.

(edit3)
Nunja, ich glaube, ich muss einfach mal ne Pause machen.
Nach dem ersten Zeichnen ist die Liste leer, da ich ja .pop()....... Dann kann es natürlich die Grafiken nicht neu zeichnen, da ja keine Elemente mehr da sind...

(edit4)
code:

            for(int index = 0; index < il.size(); index++){
                tmp = il.getAt(index);
                g.drawImage(tmp, 0, offset, this);
                g.drawLine(0, offset-1, getWidth(), offset-1);
                offset += tmp.getHeight()+2;
            }
Und schon.... Dauer-Denken macht anfällig für Fehler.