Java 如何将JPanel及其组件保存为JPEG
我需要将棋盘另存为jpeg文件。我知道如何将java组件保存到JPEG中。但我的问题是,我使用JButtons作为单元格,当我试图保存整个棋盘时,只保存面板。是否有人知道如何将JComponent及其子组件保存为JPEG(png等)提前感谢。您可以将Java 如何将JPanel及其组件保存为JPEG,java,swing,Java,Swing,我需要将棋盘另存为jpeg文件。我知道如何将java组件保存到JPEG中。但我的问题是,我使用JButtons作为单元格,当我试图保存整个棋盘时,只保存面板。是否有人知道如何将JComponent及其子组件保存为JPEG(png等)提前感谢。您可以将组件(如JPanel)打印到任何图形对象。那么,为什么不使用buffereImage的Graphics对象并将其写入磁盘呢 void takePicture(JPanel面板){ BuffereImage img=新的BuffereImage(pan
组件(如JPanel
)打印到任何图形对象。那么,为什么不使用buffereImage
的Graphics
对象并将其写入磁盘呢
void takePicture(JPanel面板){
BuffereImage img=新的BuffereImage(panel.getWidth(),panel.getHeight(),BuffereImage.TYPE_INT_RGB);
panel.print(img.getGraphics());//或:panel.printAll(…);
试一试{
write(img,“jpg”,新文件(“panel.jpg”);
}
捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
这使得这个JPanel
JPanel panel = new JPanel();
panel.add(new JButton("Hello"));
panel.add(new JButton("World"));
像这样:
根据评论更新,非常感谢@MadProgrammer签出。它将允许您创建框架中任何组件的图像。如果选择制作面板的图像,所有子组件都包含在图像中。使用Robot类创建屏幕的屏幕捕获
使用本教程获取帮助:
现在,对于您的棋盘,通过调用BuffereImage类的subImage方法来剪裁图像
可以通过调用getX()、getY()、getWidth()和getHeight()方法来获取JPanel的维度,这些方法可以传递到subImage方法中。
通过加/减一些值来操作传递的值,以获得所需的结果。如果图像可以满足您的需要,为什么不使用键盘的Prnt-Scrn
键并保存所需的图像:)您可以使用paintAll()
,通常使用paintComponent()
。如果组件尚未显示,则使用绘制会出现问题。它还使用双缓冲,这可能会导致渲染过程出现问题。通常最好使用print
或printAll
在这种情况下…我也可能最好使用组件首选尺寸而不是实际尺寸,具体取决于组件开始绘制的时间,只需说;)实际上,它不会(paint
vsprint
)在某些系统下,绘制和未显示的组件可能会导致异常,因为paint
希望连接到本机对等机;)此外,由于双缓冲在某些系统上的工作方式,它甚至可能不会产生结果……因此,不,我想说它并不总是做OP想要做的事情;)我在Windows7和MacOS上遇到过这种方法的问题。不管怎样,print
和printAll
的设计都完全符合OP的要求。仅仅因为某些东西有效,并不能使它正确;)如果我的面板上有一个滚动条,它会工作吗?我的意思是看不见的区域也必须被保存。