JPanel-Oberfläche speichern

beastofchaos

Bekanntes Mitglied
Hallo Leute,
ich bin seit 3-4 Wochen fleißig mit Java beschäftigt und arbeite mich lagnsam voran vom Wissen her. Ich arbeite seit gestern an einem Zeichenprogramm und da ich schon einiges eingebaut habe, frag ich mich nun, wie lässt sich das optimal speichern?

Habe natürlich viel gegooglet und z.B. sowas gefunden:
kleines "Tutorial"
Forumthema

Wobei ich daraus noch nicht 100%ig schlau geworden bin :(

Hier mal meine Methode "save()":

Java:
public void save(){    	
	  	FileDialog d = new FileDialog(this,"Bild speichern...",FileDialog.SAVE);
	    d.setLocale(Locale.getDefault());
	    d.setVisible(true);
	  	
	    String name = d.getDirectory();
	    name += d.getFile();
	  	
	  	
	  	BufferedImage img = new BufferedImage(935,680, BufferedImage.TYPE_INT_RGB);
	  	tempPanel.paint(img.createGraphics());                       // tempPanel ist das JPanel
	 
	  	try{
	  		ImageIO.write(img, "jpeg", new File(name));    
	  	} 
	  	catch (IOException e) {
			e.printStackTrace();
	  	}

    }

Wenn ich das bisher richtig verstanden habe, muss ich das in ein BufferedImage umwandeln, wobei es schon da bei mir hackt - wie ihr seht benutzt ich
Code:
tempPanel.paint(img.createGraphics());
. Wenn ich das Bild dadurch nun speichern und ausgeben(durch Paint) lass. Wird der "Hintergrund" schwarz und nur andere Farben als schwarz kommen noch hervor. In der paint()-Methode von tempPanel benutzt ich "clearRect", weshalb ich dachte, das schwarz stellt das "nichts" da, wie man das von Paint halt kennt. Also hab ich nochmal ein weißes Rechteck auf dem TempPanel gemalt und alle Objekte(sprich Kreise etc.) neu gezeichnet - kein Erfolg :/ Das selbe hab ich auch vor dem "Überspielen" bei dem BufferedImage versucht... ebenfalls gescheitert.

Wisst ihr eine Lösung für mein Problem oder vll. eine andere Möglichkeit, um mein JPanel als Bild zu speichern?

Gruß, der neue User Thomas ;)
 

beastofchaos

Bekanntes Mitglied
Also ich denke, die paint()-Methode muss ich nicht zeigen - ihr solltet nur wissen, dass ich darin "clearRect()" benutzt habe, was dazu führt, dass er den Hintergrund "löscht" und das wird standardmäßig schwarz gespeichert in den Bildern :/
Ich hab jetzt "clear" nicht entfernt, sondern die paint()-Methode ausgelassen - ich benutzte nämlich eine zweite Methode in dem Panel namens "DrawElements()", die dafür gedacht ist, nach dem "clearRect()" alle Kreise/ Rechtecke/ etc. neu zu zeichen(wurden alle in einem dyn. Array gespeichert). Funktioniert jetzt, bloß habe ich jetzt noch das Problem, dass die Qualität der Bilder schwach ist. Gibt es noch eine andere besser Möglichkeit, Bilder zu speichern?

Gruß, Thomas

PS: Und danke für den Link, werde ich sofort anschaun und lernen :D
 

beastofchaos

Bekanntes Mitglied
Nun ich habe wieder einiges im Programm geändert, hier mal die neue save()-Version:

Java:
private boolean save(){ 
	  	saveDia = new JFileChooser();
	  	saveDia.setDialogTitle("Bild speichern...");
	  	if (saveDia.showSaveDialog(this) == JFileChooser.CANCEL_OPTION) {
	  		return false;
	  	}
	  	
	    File file;
	    file = saveDia.getSelectedFile();
	  	
	  	Dimension tempDim = tempPanel.getSize(); 
	  	BufferedImage img = new BufferedImage(tempDim.width,tempDim.height, BufferedImage.TYPE_INT_RGB);
	  	Graphics  tempGC = img.getGraphics();
	  	try {
	  		tempGC.setColor(Color.white);
	  		tempGC.fillRect(0, 0, tempDim.width, tempDim.height);
	  		tempPanel.drawElements(tempGC);
	  	} finally {
	  		tempGC.dispose();
	  	}
	 
	  	try{
	  		ImageIO.write(img, "jpeg", file); 
	  		saved = true;
	  	} 
	  	catch (IOException e) {
			e.printStackTrace();
			saved = false;
	  	}
	    
	    return saved;
    }

Also nun kann man auch zwischen jpg/png/gif/etc. entscheiden :p
Und das "clearRect" wird nun auch nicht mehr aufgerufen.

Außerdem ist bei den Ergebnissen zwischen der Qualität von jpg und png kein Unterschied zu machen :/

Kann doch nicht sein, dass man keine gute Qualität hinbekmmt *genervt* :)
 

Marco13

Top Contributor
Die Qualität bei PNG ist... eigentlich "100%", also es wird 1:1 gespeichert, was auch angezeigt wird. ???:L (Guckst du dir die Bilder vielleicht mit dieser "Windows Fax-Anzeige" an? ;) )

EDIT: BTW, der Code mit dispose im finally und so: Viiieeel besser :) Auch wenn immernoch einige Sachen in der Methode vermischt sind...
 

beastofchaos

Bekanntes Mitglied
Jep, ich muss natürlich den Quelltext iwann noch strukturieren, bevor ich da weiter arbeite :p

Und ich schau mir die Bilder per Windows-Vorschau, Paint.Net und diesem Programm selbst an. Das Programm kann super Bilder laden - mit guter Qualität. Hab ich schon an einigen meiner Bilder getestet :)
 
Ä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
F JPanel als JPG - weisse Fläche Java Basics - Anfänger-Themen 9
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
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