Java 如何将JPanel转换为文件?

Java 如何将JPanel转换为文件?,java,image,swing,file,jpanel,Java,Image,Swing,File,Jpanel,如何将JPanel转换为文件?我的面板有一个移动的图像,我想获得单个帧。您可以在不同的时间点创建面板的缓冲区图像,然后将图像保存到文件中 这方面的基本逻辑是: BufferedImage image = new BufferedImage(panel.getWidth(), panel.getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D g2d = image.createGraphics(); panel.print( g2d ); g2d

如何将
JPanel
转换为
文件
?我的面板有一个移动的
图像
,我想获得单个帧。

您可以在不同的时间点创建面板的
缓冲区图像
,然后将图像保存到文件中

这方面的基本逻辑是:

BufferedImage image = new BufferedImage(panel.getWidth(), panel.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
panel.print( g2d );
g2d.dispose();
ImageIO.write(...);
查看该类以获取实现上述功能的方便方法


当然,这不是很有效,因为您需要为每一帧创建一个全新的图像。

您可以在不同的时间点创建面板的
缓冲图像,然后将图像保存到文件中

这方面的基本逻辑是:

BufferedImage image = new BufferedImage(panel.getWidth(), panel.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
panel.print( g2d );
g2d.dispose();
ImageIO.write(...);
查看该类以获取实现上述功能的方便方法


当然,这不是很有效,因为您需要为每一帧创建一个全新的图像。

您最好使用
print
printAll
而不是
paint
,因为它不涉及双缓冲。。。如果组件未在屏幕上实现,则不会引发异常;)@在程序员看来,不使用双缓冲区是有道理的。(代码已更改)。我从来没有遇到过异常问题(平台差异?),如果组件没有实现,尽管存在绘画问题。基本上我发现组件的大小是(0,0),所以没有什么可绘制的。ScreenImage类通过调用布局代码来为您处理大小。我已经通过
NullPointerException
了解到了这一点,但这可能与它根本没有添加到任何父级有关,因此它在设置双缓冲区时遇到了问题。。。或者,我发现在这种情况下,
print
printAll
更可靠:P@camickr我不理解“g2d.dispose()”和“ImageIO.write(…)”代码行。你能解释一下吗?谢谢您最好使用
print
printAll
而不是
paint
,因为它不涉及双缓冲。。。如果组件未在屏幕上实现,则不会引发异常;)@在程序员看来,不使用双缓冲区是有道理的。(代码已更改)。我从来没有遇到过异常问题(平台差异?),如果组件没有实现,尽管存在绘画问题。基本上,我发现组件的大小是(0,0),所以没有什么可绘制的。ScreenImage类通过调用布局代码来为您处理大小。我已经通过
NullPointerException
了解到了这一点,但这可能与它根本没有添加到任何父级有关,因此它在设置双缓冲区时遇到了问题。。。或者,我发现在这种情况下,
print
printAll
更可靠:P@camickr我不理解“g2d.dispose()”和“ImageIO.write(…)”代码行。你能解释一下吗?谢谢