jpg erzeugen aus jcomponents
-
hallo zusammen
ich hab hier ein kleines problem.
in einen jframe hänge ich weitere jcomponents ein (hier ein jsplitpanel) das ganze soll dann in eine jpg datei geschrieben werden. funktioniert auch so weit aber:
der frame soll nicht auf dem display angezeigt werden.
ich hab jetzt schon mit frame.setVisible(false) und allen anderen möglichkeiten experimentiert hab es aber nicht hinbekommen. so wie es aussieht werden erst nach aufruf von show() die components zusammengesetzt, wenn ich show() weglasse bekomme ich zwar das jpg aber mit grauem standardhintergrund. genau das gleiche passiert, wenn ich show() und hide() direkt hintereinander aufrufe.hat jemand eine idee bzw so was ähnliches schon mal gemacht?
danke schon mal
philip
so siehen meine versuche aus....
package print; import demo.egantt.component.example.gantt.*; import javax.swing.*; import java.awt.image.BufferedImage; import java.io.FileOutputStream; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; public class GantttPrinter { /** Creates a new instance of GantttPrinter */ public GantttPrinter () { } /** * @param args the command line arguments */ public static void main (String[] args) { BasicGanttExample gantt = new BasicGanttExample(); JSplitPane pane = (JSplitPane)gantt.createTable (); JFrame frame = new JFrame (); frame.getContentPane ().add (pane); frame.pack(); printJPG (frame, "c:/data.jpg"); } public static void printJPG (java.awt.Component frame, String filename){ try{ frame.show(); FileOutputStream out = new FileOutputStream (new java.io.File (filename)); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); BufferedImage bi = (BufferedImage)frame.createImage(frame.getWidth(), frame.getHeight ()); java.awt.Graphics2D g2 = bi.createGraphics (); frame.printAll (g2); encoder.encode(bi); out.close (); } catch(Exception e) { e.printStackTrace(); } finally { frame.hide(); } } }
-
der frame soll nicht auf dem display angezeigt werden.
Dann verwende entweder ein JWindow oder die Methode setUndecorated der Klasse (J)Frame
-
hat leider nicht funktioniert
mit setUndecorated kann ich die leiste mit dem fensternamen und den normalen buttons für maximieren, minimieren schließen ausblenden
und mit jwindow anstelle von jframe muß ich auch show() aufrufen, damit mein bild erzeugt werden kann...trotzdem danke
philip
-
mit setUndecorated kann ich die leiste mit dem fensternamen und den normalen buttons für maximieren, minimieren schließen ausblenden
Ich dachte eigentlich, dass du genau das willst...
Beschreibe bitte nochmal genau, was dich denn nun stört.
-
später soll das ganze ungefähr so ablaufen:
der benutzer soll von dem ganzen jpg-encode vorgang nichts mitbekommen.
er gibt ein paar daten ein, kann dann irgendwo "jpg erstellen" auswählen und dann werden die eingegebenen daten bearbeitet (im codebsp wäre das JSplitPane pane = (JSplitPane)gantt.createTable () ) und anschliessend sollen die jpg bilder erstellt und gespeichert werden. da es störend ist, dass kurz der jframe aufpopt und dann gleich wieder geschlossen wird, will ich das aufpoppen irgendwie verhindern.
-
Hi
du könntest das Frame auserhalb des sichtbaren Berreiches positionieren somit würde es kein Benutzer sehen.
mit setBounds(-50,-50,0,0)oder
du übergibst deiner Methode nur das JSplitPane, leider sieht man aber keinen Verschiebebalken in der Mitte mehr.
package print; // import demo.egantt.component.example.gantt.*; import javax.swing.*; import java.awt.image.BufferedImage; import java.io.FileOutputStream; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; public class My { /** Creates a new instance of GantttPrinter */ public My () { } /** * @param args the command line arguments */ public static void main (String[] args) { // BasicGanttExample gantt = new BasicGanttExample(); //JSplitPane pane = (JSplitPane)gantt.createTable (); JSplitPane pane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); pane.add(new JLabel("Hallo")); pane.add(new JLabel("Andere Seite")); /* JFrame frame = new JFrame (); frame.getContentPane ().add (pane); frame.pack(); */ printJPG (pane, "c:/data.jpg"); } public static void printJPG (java.awt.Component frame, String filename){ try{ // frame.show(); FileOutputStream out = new FileOutputStream (new java.io.File (filename)); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); BufferedImage bi = (BufferedImage)frame.createImage(frame.getWidth(), frame.getHeight ()); java.awt.Graphics2D g2 = bi.createGraphics (); frame.printAll (g2); encoder.encode(bi); out.close (); } catch(Exception e) { e.printStackTrace(); } finally { frame.hide(); } } }
-
das verschieben außerhalb des sichtbaren bereichs wäre vermutlich das einzige gewesen was vernünftig funktionieren würde.
zum glück für meine studienarbeit gibts aber noch ein anderes open source project (jfreechart), dass kann offline rendern
-
ich kann keine JPG-Datei mehr öffnen
was kann ich da machen ?
kann mir da wer helfenmeine eMail blackdragon11087@aol.com