将JPanel转换为图像
有没有办法将JPanel(尚未显示)转换为BufferedImage?
谢谢
杰夫
从 BufferedImage 中,您可以创建一个图形对象,您可以使用该对象在 JPanel 上调用 paint,如下所示:
public BufferedImage createImage(JPanel panel) {
int w = panel.getWidth();
int h = panel.getHeight();
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
panel.paint(g);
g.dispose();
return bi;
}
您可能需要确保先设置面板的大小。
基本上,我正在构建一个需要写入图像但不显示的组件。
ScreenImage解释了如何做你想做的事。
屏幕图像的相关部分.java(略有编辑)。 强制所有按钮都显示在图像中。layoutComponent
/**
* @return Renders argument onto a new BufferedImage
*/
public BufferedImage createImage(JPanel panel, int width, int height) {
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = bi.createGraphics();
panel.setSize(width, height); // or panel.getPreferedSize()
layoutComponent(panel);
panel.print(g);
g.dispose();
return bi;
}
private void layoutComponent(Component component) {
synchronized (component.getTreeLock()) {
component.doLayout();
if (component instanceof Container) {
for (Component child : ((Container) component).getComponents()) {
layoutComponent(child);
}
}
}
}