[Java]GUI窗口截图


前言

本文讲述了按照常规思路,如何思考将GUI窗口截图下来并保存的问题


一、如何实现截图?

方法三是最终的解决方案,前面两个是我个人的想法,若不想看可直接跳到方法三

1.截图的过程

首先,截图的结果是一张图片,那么我们就需要先创建一张图片作为截图结果的载体,把截取的内容绘制到这张图片里,然后再将这张图片保存

2.方法一

因为需要将窗体绘制到一张图片里,而窗体的内容是被绘制进Graphics中的,我们会理所当然的想到能不能用某种方法,用窗体的Graphics去创建一个BufferedImage,然后直接保存此BufferedImage,经过帮助文档一番查阅,没有发现此类构造器和方法,本方法行不通。

3.方法二

用Graphics去创建一张BufferedImage中行不通,那么我们或许可以尝试一下获取BufferedImage的Graphics画笔,然后在这张图片的BufferedImage上绘制,绘制完成后,再将此BufferedImage保存就好了。
我去查阅了一下Graphics绘制相关的方法,发现有关在Graphics上绘制的方法基本上都是有关图形或者是字符串的,没有可以可以实现精确到像素的点级别的绘制方法,此方法也以失败告终。

4.方法三

前面两种方法都行不通,那我们去GUI的相关类里找找解决方法?
最终我在Componnet类中发现了paintAll()这个方法,这个方法可以将组件的Graphics绘制进指定的Graphics中。

二、代码片

1.引入库

代码如下:

try {
    BufferedImage temp = new  BufferedImage(table.getWidth(),table.getHeight(),BufferedImage.TYPE_3BYTE_BGR);
    Graphics2D g2d = temp.createGraphics();
    table.paintAll(g2d);   //table是一个JPanel
    ImageIO.write(temp,"png",new File("G:\\111.png"));
} catch (Exception ex) {
    ex.printStackTrace();
}

2.结果展示

这是我窗体的完整图片
成功截取下来的小图
最终截图


结语

一年时间过得真快啊。


不能为了编程而编程,而是在学习编程的过程中学会抓住问题的切入点,锻炼解决问题的能力,这样我们才能进步的更多。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值