wie speichern panel als Bild in swing?
Hallo ich möchte konvertieren-panel enthält Komponenten wie label und-Tasten, um Bild-Datei.
Ich habe den folgenden code. Das Bild gespeichert wurde. aber der Inhalt des Fensters nicht sichtbar sind oder gespeichert. Kann mir jemand sagen, wie speichern Sie das panel mit seinen Komponenten.
Code:
package PanelToImage;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.*;
public class sample extends JPanel {
public JPanel firstpanel;
public JPanel secondpanel;
JLabel label1, label2;
JButton button1, button2;
public sample() {
firstpanel = new JPanel();
firstpanel.setSize(400,300);
firstpanel.setBackground(Color.RED);
secondpanel = new JPanel();
secondpanel.setBackground(Color.GREEN);
secondpanel.setSize(400,300);
label1 = new JLabel("label1");
label2 = new JLabel("label2");
button1 = new JButton("button1");
button2 = new JButton("button2");
firstpanel.add(label1);
firstpanel.add(button1);
secondpanel.add(label2);
secondpanel.add(button2);
saveImage(firstpanel);
add(firstpanel);
//add(secondpanel);
}
public static void main(String args[]) {
JFrame frame = new JFrame();
sample sam = new sample();
frame.setContentPane(sam);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
}
private void saveImage(JPanel panel) {
BufferedImage img = new BufferedImage(panel.getWidth(), panel.getHeight(), BufferedImage.TYPE_INT_RGB);
panel.paint(img.getGraphics());
try {
ImageIO.write(img, "png", new File("E://Screen.png"));
System.out.println("panel saved as image");
} catch (Exception e) {
System.out.println("panel not saved" + e.getMessage());
}
}
}
Siehe ComponentImageCapture.java für die Anzeige der sichtbaren Komponenten - scrollen Sie nach unten für Siehe auch & Eine Klasse von Rob Camick, das nimmt viel von der Routinearbeit aus nehmen Sie ein Bild aus einer Komponente, die wurde nicht angezeigt. Und einige andere tricks für die rendering-Komponenten vor der Anzeige gesehen werden kann Warum hat die JTable header erscheint nicht in der Bild?
Mir scheint, Sie stellen die falschen
Mir scheint, Sie stellen die falschen
Path
für die Datei erstellt werden. Da dein Programm weiß nichts über das, was Drive E
, so der neue File
erstellt werden müssen referenziert werden mit Relative Path
mit Bezug auf die .class File
wie ..\..\E:\Screen.png
, so dass es gehen zwei Stufen nach oben und dann heraus erreichen für Drive E
, so etwas wie dies funktionieren wird. Das erzeugte Bild mit meiner Antwort, oder @Alberto 's Antwort erstellt wird neben dem .Klasse Datei.InformationsquelleAutor Babu R | 2012-06-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tthis code funktioniert bei mir (in der
JFrame
):Vielleicht haben Sie verwendet benutzerdefinierte panels. Wenn das stimmt, versuchen Sie, fügen
super.paint(g)
am Anfang derpaint
Methoden Ihrer Platten.BEARBEITEN: Sie müssen rufen Sie
saveImage
nach display-Rahmen:EDIT 2: Dies wird das gespeicherte Bild (ist wenig, weil das layout, aber ist der Beweis, dass es funktionieren sollte):
Rief ich die
saveImage
als letzten Aufruf in dermain
, und verwendet eine Datei im Benutzer-Verzeichnis (new File("Screen.png")
) als nette Kuh sagte.Siehe mein edit. Sie haben zu nennen, saveImage, nachdem der Rahmen wird angezeigt.
Siehe ComponentImageCapture.java für die Anzeige der sichtbaren Komponenten - scrollen Sie nach unten für Siehe auch & Eine Klasse von Rob Camick, das nimmt viel von der Routinearbeit aus nehmen Sie ein Bild aus einer Komponente, die wurde nicht angezeigt. Und einige andere tricks für die rendering-Komponenten vor der Anzeige gesehen werden kann Warum hat die JTable header erscheint nicht in der Bild?
sorry, ich kann nicht konvertieren-Bedienfeld Bild mit den Bauteilen.problem nicht gelöst.
Aber Sie haben versucht, zu rufen
saveImage
nachsetVisible
? Es funktioniert?InformationsquelleAutor
Hier versuchen, dieses Programm zum Beispiel, statt der Verwendung
getGraphics()
scheint, wie Sie zu verwendencreateGraphics()
für dieBufferedImage
über Sie zu stellen.Danke für diese wertvollen links, die ich gesehen hatte, dass die Letzte Frage, nachdem, bevor, als ich gerade angefangen zu lernen
Painting in Swing
, obwohl das ganze Ding ging über meinem Kopf in dieser Zeit. Aber dieses mal hoffe ich in der Lage sein, zu lernen, Belastungen aus diesen Beispielen :-). Thankx wieder. CheersInformationsquelleAutor