Hola quiero convertir el panel que contiene componentes como etiquetas y botones en el archivo de imagen.cómo guardar el panel como imagen en el columpio?
He realizado el siguiente código. La imagen fue guardada pero el contenido del panel no está visible o guardado. ¿Alguien puede decirme cómo guardar el panel con sus componentes?
Código:
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());
}
}
}
Ver [ComponentImageCapture.java] (http://stackoverflow.com/a/5853992/418556) para la visualización de los componentes visibles - para desplazarse hacia abajo ** ** Véase también y una clase por Rob Camick que toma una Gran parte del gruñido funciona al tomar una imagen de un componente que no se ha mostrado. Y algunos de los otros trucos para renderizar componentes antes de la visualización se pueden ver en [¿Por qué el encabezado JTable no aparece en la imagen?] (Http://stackoverflow.com/q/7369814/418556) –
Me parece que eres proporcionando la "Ruta" incorrecta para que se cree el archivo. Dado que su Programa no sabe nada de lo que es 'Drive E', entonces el nuevo' Archivo' que se creará debe estar referenciado con 'Relative Path' con respecto al' .class File', como '.. \. . \ E: \ Screen.png', haciendo que suba dos niveles y luego llegue a 'Drive E', algo así funcionará. La imagen así creada con mi respuesta o la respuesta de @Alberto se crea al lado del archivo .class. –