如何在摇摆中将面板保存为图像?

您好我想将包含标签和按钮等组件的面板转换为图像文件。

我已经完成了以下代码。 图像已保存。 但面板的内容不可见或保存。 任何人都可以告诉我如何使用其组件保存面板。

码:

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()); } } } 

这段代码适合我(在JFrame ):

 Container c = getContentPane(); BufferedImage im = new BufferedImage(c.getWidth(), c.getHeight(), BufferedImage.TYPE_INT_ARGB); c.paint(im.getGraphics()); ImageIO.write(im, "PNG", new File("shot.png")); 

也许您使用过自定义面板。 如果为true,请尝试在面板的paint方法的开头添加super.paint(g)

编辑 :你必须显示框架调用saveImage

 public static void main(String args[]) { ... frame.setSize(400, 300); sam.saveImage(sam.firstpanel); } 

编辑2 :这是保存的图像(因为布局很少,但certificate它应该工作):

在此处输入图像描述

我将saveImage称为saveImage中的最后一个调用,并使用用户目录中的new File("Screen.png") ),如nIcE cOw所述。

在这里尝试这个示例程序,而不是使用getGraphics()似乎你必须使用createGraphics()为你将要制作的BufferedImage

 import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import javax.swing.*; public class SnapshotExample { private JPanel contentPane; private void displayGUI() { JFrame frame = new JFrame("Snapshot Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); contentPane = new JPanel(); contentPane.setOpaque(true); contentPane.setBackground(Color.WHITE); JLabel label = new JLabel("This JLabel will display" + " itself on the SNAPSHOT", JLabel.CENTER); contentPane.add(label); frame.setContentPane(contentPane); frame.pack(); frame.setLocationByPlatform(true); frame.setVisible(true); makePanelImage(contentPane); } private void makePanelImage(Component panel) { Dimension size = panel.getSize(); BufferedImage image = new BufferedImage( size.width, size.height , BufferedImage.TYPE_INT_RGB); Graphics2D g2 = image.createGraphics(); panel.paint(g2); try { ImageIO.write(image, "png", new File("snapshot.png")); System.out.println("Panel saved as Image."); } catch(Exception e) { e.printStackTrace(); } } public static void main(String... args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new SnapshotExample().displayGUI(); } }); } }