JPanel als JPG - weisse Fläche

feldmarv

Mitglied
Rettendes Java Forum =)

Ihr konntet mir schon sehr sehr viel helfen bezüglich meinen Java Problemen.
Ich habe nun mein Zeichnungsprogramm schon bald fertig und versuche mit mir der Methode die Zeichnungsfläche (JPanel) als JPG auf dem Desktop sichern zu können. Wenn ich nun die folgende Methode, die ich aus einem anderen Forum habe versuche einzubauen klappt eigentlich alles. Die grösse des Panels wird übernommen. Aber die JPG Datei hat nur die Farbe des Hintergrunds. Die Objekte die gezeichnet wurden erscheinen nicht?

Java:
	String fileName = "comet01.jpg"; 
        float quality = 0.9f; 

        int w = pan2.getWidth(); 
        int h = pan2.getHeight(); 
        BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); 
        Graphics2D big2d = bi.createGraphics(); 

        pan2.paint(big2d); 

        try { 
            FileOutputStream fos = new FileOutputStream(new File(fileName)); 
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos); 
            JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi); 
            param.setQuality(quality, false); 
            encoder.setJPEGEncodeParam(param); 
            encoder.encode(bi); 
        } catch (Exception ex) { 
            ex.printStackTrace(); 
        }
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Wenn alles von der paint-Methode aus gezeichnet wird, könnte das ungefähr so gehen, aber es ist ein bißchen hakelig (man sollte auch SwingUtilities (Java Platform SE 6) verwenden können, aber das hat ein paar kramfige Eigenschaften). Ist das Panel zum Zeitpunkt des Zeichnens sichtbar auf dem Bildschirm? Mit Robot einen Screenshot machen wäre ggf. einfacher, kann aber auch unerwünschte Effekte haben, mit paint(g) ist's eigentlich besser (wenn's funktioniert ;)). Ein KSKB wäre gut. Vielleicht wenigstens etwas mehr code aus dem Zeichenpanel (paint und paintComponent und so). Wenn du irgendwo getGraphics auf einer Component aufrufst, hast du ein Problem ;) (Auf dem bufferedImage ist es OK!!!)
 

feldmarv

Mitglied
vielen dank für den input.
es sieht so aus bei mir. In der GUI klasse werden dinge mit den maus funktionen gezeichnet. In der Painter klasse werden diese in eine Arraylist speichert (die koordinaten) und alle 24stel sekunden frisch gezeichnet.
Die Gui klasse erbt von der klasse LINIE in der die Koordinaten und die g.drawLine() methode definiert sind. Somit sitzt die paint methode eigentlich auch in der klasse LINIE.

Ja das JPanel ist zum Zeitpunkt des Zeichnens sichtbar.
 

bERt0r

Top Contributor
In der Painter klasse werden diese in eine Arraylist speichert (die koordinaten) und alle 24stel sekunden frisch gezeichnet.

Wieso alle 24stel sekunden? Zeichnest du deine Graphikobjekte von ausserhalb durch übergeben der Graphics auf dein Panel drauf oder wie? Erscheint mir ein bisschen suboptimal und würde erklären warum es nicht hinhaut.
 

feldmarv

Mitglied
Wieso alle 24stel sekunden? Zeichnest du deine Graphikobjekte von ausserhalb durch übergeben der Graphics auf dein Panel drauf oder wie? Erscheint mir ein bisschen suboptimal und würde erklären warum es nicht hinhaut.

da ich java anfänger bin verstehe ich nicht ganz was du meinst. aber ich glaube es geht in diese richtung. Ich übergebe das graphics objekt in einen Thread der dann alles 24stel sekunden neu zeichnet.

Was wäre hier eine schlaue Lösung?
 

bERt0r

Top Contributor
Nein ist es nicht. Du musst deine Objekte nicht bei jedem Frame (im Sinne von fps -Frame pro Sekunde) oder so jedes mal neu Zeichnen. Das macht Java ganz von alleine. Du solltest nur in deiner Paint methode auf die Graphics deines Panels zeichnen, Java ruft paint selbständig auf, sobald was neues zu zeichnen ist (z.b wenn sich die Größe ändert oder ein anderes Fenster drübergeschoben wird). Ein manuelles Zeichnen alle paar millisekunden ist schätze ich auch performancemäßig Horror.
Mein Ansatz für dein Problem wäre, eine Klasse BildPanel die von JPanel erbt. Der gibst du deine Arraylist mit den Objekten und überschreibst die paintComponent Methode dort.
 

feldmarv

Mitglied
Vielen Dank für die ausführliche Antwort. Werde mir diesen Ratschlag zu herzen nehmen und dies später so umsetzen.
Im Moment habe ich das Problem mit einem "Robot" gelöst. Ich fertige einfach einen Screenshot des Zeichenpanels an und speichere diesen. Die Qualität ist nicht die beste :p

Java:
public void takeSnapShot(JPanel fenster){  
		 try {
	           java.awt.Robot robot = new java.awt.Robot();                 
	           BufferedImage img = robot.createScreenCapture(new    Rectangle(fenster.getLocationOnScreen().x,fenster.getLocationOnScreen().y,
	                fenster.getWidth(),fenster.getHeight()));            		
	            		
	            ImageIO.write(img, "png", new File("speichern.png"));
	            		}
	            		catch (Exception ex) {System.out.println(ex);
	            		}
	            		
	            		}
 

Marco13

Top Contributor
Ein PNG sollte eigentlich verlustfrei (d.h. mit "voller" Qualität) gespeichert werden.
(Ich wollte übrigens oben andeuten, dass er eben auch jeden x-Beliebigen anderen Bildschirminhalt abfotografieren würde, wenn z.B. ein anderes Fenster vor dem eigenen ist.. aber das nur nebenbei)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
richis-fragen Optisch JPanel BorderLayout vertikaler Rand dicker als horizontaler Rand Java Basics - Anfänger-Themen 4
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
J JSON mit einem JPanel Java Basics - Anfänger-Themen 3
J Ein mit UI-Designer erstelltes JPanel einblenden Java Basics - Anfänger-Themen 0
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
C mehrere JPanel in ein JFrame bringen Java Basics - Anfänger-Themen 9
M HILFE JPanel - Graphics Java Basics - Anfänger-Themen 1
B Scrollbares Fenster (JScrollPane) mit JPanel scrollt nicht Java Basics - Anfänger-Themen 3
Zeppi JPanel responsive Grid Java Basics - Anfänger-Themen 0
J JPanel in JScrollPanel Java Basics - Anfänger-Themen 4
Elyt JPanel als HintergrundBild Java Basics - Anfänger-Themen 7
W 2 JPanel in einem JFrame Java Basics - Anfänger-Themen 4
B Wie kann man an ein JPanel eine Scrollbar anheften? Java Basics - Anfänger-Themen 8
O Swing JPanel Java Basics - Anfänger-Themen 4
CptK Klassen JPanel nach Ablauf der Spielzeit neuladen Java Basics - Anfänger-Themen 2
S JPanel wird nicht angezeigt Java Basics - Anfänger-Themen 1
D Animation JPanel Java Basics - Anfänger-Themen 1
M JLabels "verrutschen" beim übergeben von JPanel Java Basics - Anfänger-Themen 2
D Auf angeklicktes JPanel zugreifen Java Basics - Anfänger-Themen 5
D JPanel mehrere Formen zeichnen Java Basics - Anfänger-Themen 5
D JPanel passt die Größe nicht an Java Basics - Anfänger-Themen 22
Y Webinhalt JPanel Java Basics - Anfänger-Themen 6
D Erste Schritte JPanel verschiebt Fenster via setVisible Java Basics - Anfänger-Themen 5
Dechasa Interface JFrame mit mehreren Übereinander liegenden JPanel Java Basics - Anfänger-Themen 5
S JPanel variablenabhängig erstellen Java Basics - Anfänger-Themen 13
J Methoden Dinge auf einem JPanel paltzieren Java Basics - Anfänger-Themen 1
Z JPanel wird zweimal hinterinander gezeichnet.. Wieso? Java Basics - Anfänger-Themen 4
F JFrame resize verschiebt JPanel Java Basics - Anfänger-Themen 3
A altes JPanel entfernen und neues öffnen Java Basics - Anfänger-Themen 5
I A0-Format in jpanel anzeigen Java Basics - Anfänger-Themen 1
R NullPointerException wegen JPanel oder doch nicht ? Java Basics - Anfänger-Themen 7
J Probleme mit eigenem JPanel (IDE Eclipse) Java Basics - Anfänger-Themen 4
S JPanel wird versetzt auf JFrame gelegt Java Basics - Anfänger-Themen 2
V jab ich eclipse verrückt gemacht :D ? array Jpanel, Jlabel Grafik Fehler / Frage Java Basics - Anfänger-Themen 5
R Focus auf JPanel im Thread Java Basics - Anfänger-Themen 9
I Problem mit JPanel Java Basics - Anfänger-Themen 0
B JPanel ändert die Hintergrundfarbe nicht Java Basics - Anfänger-Themen 2
F Threads funktionieren auf JPanel nicht Java Basics - Anfänger-Themen 1
C JPanel in MessageDialog Java Basics - Anfänger-Themen 1
B JPanel/JFrame in ein Applet umwandeln (Webfähig) Java Basics - Anfänger-Themen 7
S Inhalt von JPanel erst nach Resize sichtbar Java Basics - Anfänger-Themen 2
M Listener einerm JPanel hinzufuegen Java Basics - Anfänger-Themen 3
gamebreiti Methoden JPanel nach clearAll() und add neu zeichnen Java Basics - Anfänger-Themen 1
S vom JPanel aus durch Mouselistener Internet aufrufen Java Basics - Anfänger-Themen 6
Z JPanel bleibt leer Java Basics - Anfänger-Themen 2
E Bild per Verzeichnis/JFileChooser auf JPanel laden Java Basics - Anfänger-Themen 13
Q JPanel Java Basics - Anfänger-Themen 2
K Erste Schritte jpanel in einer klasse auslagern Java Basics - Anfänger-Themen 3
I Anfängerfrage JPanel repaint() Java Basics - Anfänger-Themen 6
N String auf JPanel bewegen Java Basics - Anfänger-Themen 6
K Erste Schritte Jframe Im Jpanel Java Basics - Anfänger-Themen 4
S Layout mit JPanel in JScrollPanel funktioniert nicht Java Basics - Anfänger-Themen 3
S JPanel drucken -> PrinterException Java Basics - Anfänger-Themen 2
B JPanel -JTable Java Basics - Anfänger-Themen 2
H JPanel Hintergrund transparent setzen? Java Basics - Anfänger-Themen 10
A Input/Output Hashmap in einem JPanel via JList anzeigen Java Basics - Anfänger-Themen 8
L zoomen aus jpanel Java Basics - Anfänger-Themen 7
P Bekomme in meinen JPanel nur eine JComponente angezeigt Java Basics - Anfänger-Themen 7
A Methoden repaint() zeichnet JPanel falsch Java Basics - Anfänger-Themen 3
R JFrame über einen JPanel Java Basics - Anfänger-Themen 5
I Veränderungen am JPanel vom JDialog aus Java Basics - Anfänger-Themen 6
F JPanel zu klein Java Basics - Anfänger-Themen 5
D GUI - Objekte in JPanel nach oben schieben Java Basics - Anfänger-Themen 2
S JPanel wird nicht eingefügt Java Basics - Anfänger-Themen 3
P Netbeans Platform - JLabel und JPanel setLocation Problem Java Basics - Anfänger-Themen 2
Kenan89 JPanel mit JTable Java Basics - Anfänger-Themen 9
I JPanel in JPanel Java Basics - Anfänger-Themen 2
A Zugriff auf Komponente innerhalb einer JPanel Java Basics - Anfänger-Themen 8
J Auf einem JPanel ein JFrame platzieren Java Basics - Anfänger-Themen 10
S JPanel anzeige Java Basics - Anfänger-Themen 2
propra Wie mache ich einem JPanel mein bereits instanziertes Model bekannt Java Basics - Anfänger-Themen 9
T Zugreifen auf JPanel Java Basics - Anfänger-Themen 4
K JPanel auslagern Java Basics - Anfänger-Themen 9
J Paint Methode von JPanel aufrufen Java Basics - Anfänger-Themen 15
T Tastendruck simulieren in JPanel Java Basics - Anfänger-Themen 3
P JPanel in JTable einfügen Java Basics - Anfänger-Themen 23
E Erste Schritte Objekte werden in JPanel angedockt und maximiert Java Basics - Anfänger-Themen 7
M Componenten auf JPanel anzeigen Java Basics - Anfänger-Themen 2
L Image laden und auf jPanel ausgeben Java Basics - Anfänger-Themen 7
M JLabel auf JPanel positionieren Java Basics - Anfänger-Themen 8
M Verständnisfrage zu JPanel Java Basics - Anfänger-Themen 3
M MouseListener funkioniert auf JPanel nicht Java Basics - Anfänger-Themen 8
D JPanel + ein JLabel Java Basics - Anfänger-Themen 8
B JPanel-Oberfläche speichern Java Basics - Anfänger-Themen 9
X JTable in JPanel in JTabbedPane mouseevent von jtable kommt nicht durch Java Basics - Anfänger-Themen 3
P GUI, JPanel Java Basics - Anfänger-Themen 7
H JPanel in andere Klasse übergeben Java Basics - Anfänger-Themen 7
D Grösse eines JPanel hinsichtlich LayoutManager festlegen Java Basics - Anfänger-Themen 4
B JPanel über anderem JPanel Java Basics - Anfänger-Themen 6
F zeichnen in JPanel Java Basics - Anfänger-Themen 7
F Unterschied JPanel und JFrame Java Basics - Anfänger-Themen 5
U JPanel dynamisch gestalten Java Basics - Anfänger-Themen 7
H Zeichnen in JPanel Java Basics - Anfänger-Themen 8
K Auf JPanel Zeichnen Java Basics - Anfänger-Themen 8
C jPanel im jPanel verändern Java Basics - Anfänger-Themen 15
B JPanel nachträglich verändern Java Basics - Anfänger-Themen 20
C JPanel erhält sporadisch keinen Fokus Java Basics - Anfänger-Themen 3
I repaint bei jpanel Java Basics - Anfänger-Themen 10
L JPanel vergrößern bis JScrollPane nicht mehr zu sehen Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben