【发布时间】:2012-07-01 15:26:32
【问题描述】:
您好,我想将包含标签和按钮等组件的面板转换为图像文件。
我已经完成了以下代码。图像已保存。但面板的内容不可见或未保存。谁能告诉我如何保存面板及其组件。
代码:
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());
}
}
}
【问题讨论】:
-
查看 ComponentImageCapture.java 以显示可见组件 - 向下滚动以查看 另请参阅 和 Rob Camick 的课程,它从尚未显示的组件。在显示之前渲染组件的其他一些技巧可以在Why does the JTable header not appear in the image? 中看到
-
在我看来,您为要创建的文件提供了错误的
Path。由于您的程序不知道什么是Drive E,因此将创建的新File必须相对于.class File引用Relative Path,如..\..\E:\Screen.png,使其分为两个级别起来然后联系Drive E,这样的事情就可以了。使用我的答案或@Alberto 的答案创建的图像是在 .class 文件旁边创建的。
标签: java image swing panel graphics2d