[Erledigt] Component als Bild

Ich erzeuge von meiner Componente ein Bild mit diesen Code

    BufferedImage im = new BufferedImage(comp.getWidth(), comp.getHeight(), BufferedImage.TYPE_INT_RGB);
    Graphics g = im.createGraphics();
    comp.paint(g);
    if(comp instanceof JRootPane)
      ((JRootPane)comp).getRootPane().paint(g);

was ich dann auch abspeichere

Bisher hat es wunderbar geklappt nur auf einmal malt er nurnoch die Hälfte, d.h. ich hab eine JRootPane welche ich malen will mit mehreren Componenten drauf und die Glasspane benutz ich auch zum Zeichnen.
Alle Componenten werden immer gezeichnet und landen wunderbar auch im Bild.
Aber seit kurzem gibt es Probleme mit den Sachen auf der Glasspane, die werden auf einmal nicht immer gezeichnet. Die Methoden und alles werden aufgerufen aber es kommt nichts ins Bild.

Hat jemand eine Idee?

Probiere mal ne andere Java-Version aus.

welche denn? :wink:
ich hab hier 1.6

Das da stammt aus meinem Datenbankdesigner, lade ich ein Projekt andem ich gerade arbeite mit >20 Tabellen tritt das da auf
Nehm ich eins mit 3 Tabellen geht wieder alles, das wundert mich ja so

Ich kann das nicht nachvollziehen.
Was heißt: “auf einmal malt er nurnoch die Hälfte”?

Hast du Screenshots von beiden Zuständen?

naja wie gesagt er malt die Relationen nicht mehr
…Alt ist wie es sein sollte mit Relationen und das andere Bild ist wie es jetzt manchmal ist

Die richtigen Referenzen wirst du ja immer noch benutzen.
Aber versuchs mal mit Java 1.5. Vielleichst gehts da.
Ich hatte vor Kurzem auch ein Problem mit Java 1.6, nach dem Versions-Downgrade ging dann wieder alles wie gewohnt.

ne da ändert sich nichts, ich denk auch nicht dass es daran liegt
ich vermute eher das Image wird nicht fertig gezeichnet bevor es geschrieben wird, weil angezeigt wird ja alles und die gleichen Methoden werden fürs Bild ja auch verwendet
aber dem widerspricht es weil wenn ich Tabellen Relationen lösch ist es immernoch

Leuchtet ein und würde es auch erklären…
Du verwendest BufferedImage. Leere mal den Puffer/Cache abschließend mit der flush()-Methode. Damit sollte der Rest des Puffers auch noch geschrieben werden.

bzw. rufe die „dispose“-Methode von Graphics auf, wenn du es nicht mehr benötigst.

ne hat auch nichts geholfen

Hat Glasspane auch die richtige Grösse (setSize) ?

ich denk schon weil auf der GUI wird alles korrekt dargestellt

Hängt halt davon ab, wann der Component capture gemacht wird.
Wenn die Component zu dem Zeitpunkt nicht sichtbar ist, dann musst du imo explizit einen setSize machen.

EDIT: Ich weiss nicht, ob’s einen Unterschied macht, aber versuch’s halt auch mal mit **print **statt paint.

cool mit print klappts
danke

cool, das löst auch eines meiner Probleme. :idea: