Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将JPanel及其组件保存为JPEG_Java_Swing - Fatal编程技术网

Java 如何将JPanel及其组件保存为JPEG

Java 如何将JPanel及其组件保存为JPEG,java,swing,Java,Swing,我需要将棋盘另存为jpeg文件。我知道如何将java组件保存到JPEG中。但我的问题是,我使用JButtons作为单元格,当我试图保存整个棋盘时,只保存面板。是否有人知道如何将JComponent及其子组件保存为JPEG(png等)提前感谢。您可以将组件(如JPanel)打印到任何图形对象。那么,为什么不使用buffereImage的Graphics对象并将其写入磁盘呢 void takePicture(JPanel面板){ BuffereImage img=新的BuffereImage(pan

我需要将棋盘另存为jpeg文件。我知道如何将java组件保存到JPEG中。但我的问题是,我使用JButtons作为单元格,当我试图保存整个棋盘时,只保存面板。是否有人知道如何将JComponent及其子组件保存为JPEG(png等)提前感谢。

您可以将
组件(如
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
vs
print
)在某些系统下,绘制和未显示的组件可能会导致异常,因为
paint
希望连接到本机对等机;)此外,由于双缓冲在某些系统上的工作方式,它甚至可能不会产生结果……因此,不,我想说它并不总是做OP想要做的事情;)我在Windows7和MacOS上遇到过这种方法的问题。不管怎样,
print
printAll
的设计都完全符合OP的要求。仅仅因为某些东西有效,并不能使它正确;)如果我的面板上有一个滚动条,它会工作吗?我的意思是看不见的区域也必须被保存。