Suche Hilfe zu WindowIconified/ WindowDeIconified

Hi Experten,

ich habe das Problem, dass wenn ich mein Frame verdecke bzw. in die Startleiste schicke, dass die Informationen im Frame verloren sind, sobald ich es wieder nach oben/vorne hole. Wie kann ich das verhindern?

Meine Idee war, dass ich das Event WindowIconfied abfange und mir das Canvas sichere. Allerdings scheint es da schon zu spät zu sein…er baut das Bild nicht wieder auf :frowning:

Kann mir jemand schnell helfen?

Danke
Christian

ich habe das Problem, dass wenn ich mein Frame verdecke bzw.
in die Startleiste schicke, dass die Informationen im Frame
verloren sind, sobald ich es wieder nach oben/vorne hole. Wie
kann ich das verhindern?

Hallo!

Ich bin mir nicht ganz sicher, worauf du hinaus willst, aber hast du schonmal versucht, die Ausgabe erst im Speicher vorzubereiten (Stichwort Background-Image) und dann daraus zu zeichnen? Das sollte bei aufwändigen Ausgaben um einiges schneller gehen als das Neuzeichnen - und das Scrollen, etc. geht so i.A. recht flink.

Javas „ScrollPane“ kann das übrigens auch, da kannst du angeben, dass du aus Geschwindigkeitsgründen eine Kopie im Hintergrund behalten möchtest.

Hilft dir das?

Gruß,
Stefan :smile:

Hallo Christian,

komisch, bei mir passiert das nicht!

Hier unten findest du 2 einfache Klassen womit ich das probiert habe.
Vergleich mal. Wenn du es nicht hinkriegst, kannst du mir deine Klasse als Quelcode mal zumailen.
Gruss,
Marc

public class CanvasDataLost extends java.awt.Frame
{

MyCanvas myc;

public CanvasDataLost()
{
myc=new MyCanvas();

setSize(100,100);
add(myc);
show();

}
public static void main(String[] args)
{
CanvasDataLost canvasDataLost1 = new CanvasDataLost();
}
}

public class MyCanvas extends java.awt.Canvas
{

public void paint(java.awt.Graphics g)
{
g.drawOval(0,0,getSize().width-1, getSize().height-1);
}
}

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hi stefan,

danke für deine antwort. etwas hilft es mir schon, aber waer schon super, wenn du noch etwas konkreter werden könntest.

gerade das stichwort background-image klingt interessant. ich möchte in zukunft das gezeichnete canvas in einer art buffer halten, damit z.b. ein gezeichneter ausschnitt gezoomt werden kann.

ich hoffe ich hab da keine vollkommen falschen anforderungen. muss ich dazu mein programm konzeptionell komplett anders aufbauen? welche objekte schlägst du vor?

vielleicht können wir auf einem anderen weg (email, telefon) schneller kommunizieren? wenns dir recht ist…?!

gruss
christian

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo nochmal!

danke für deine antwort. etwas hilft es mir schon, aber waer
schon super, wenn du noch etwas konkreter werden könntest.

Nimm ein

java.awt.image.BufferedImage

damit ist das überhaupt kein Problem. Du kannst in so ein Bild genauso hineinzeichnen wie auf den Bildschirm (Graphics-Objekt) und das ganze dann in der redraw-Routine auf den Bildschirm kopieren, über dessen Graphics.drawImage Methode.

http://www.jalice.net/mydrawnotices2.htm

Weiterführendes auch hier:
http://java.sun.com/docs/books/tutorial/2d/images/in…

gerade das stichwort background-image klingt interessant.

Falsches Stichwort, hätte eben „Buffered Image“ sein müssen, tschuldige… Du wirst auch oft den Begriff „Double-Buffering“ finden, das Verwenden zweier unabhängiger Bilder bei Animationen, wo immer jeweils eines angezeigt wird und das andere bearbeitet, so dass für das nächste Bild nicht viel gezeichnet werden muss - es wird einfach zwischen den Bildern umgeschaltet.

Das wird sehr oft verwendet, eigentlich überall, wo ein Bild öfters angezeigt werden muss (also z.B. auch per „redraw“) als es gezeichnet wird.

ich
möchte in zukunft das gezeichnete canvas in einer art buffer
halten, damit z.b. ein gezeichneter ausschnitt gezoomt werden
kann.

Ein Code-Stückchen zum Zoomen dazu findest du hier:
http://developer.java.sun.com/developer/qow/archive/70/

Das dürfte dir erstmal alles Wichtige erklären. Wenn noch mal fehlt, kannst du mir auch gerne mailen.

Gruß,
Stefan :smile: