当前位置: 首页 > news >正文

swing 把对话框保存为图片

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

做项目时,有意需求需要把弹出的对话框保存为图片。

重点知识:
        JComponent提供了两个方法,print和printall可以将组件使用Graphics图形环境进行绘制,即将组件本身的内容都绘制到Graphics上,我们如果想要将组件保存成图片的话,只需要创建一个image对象,然后将其Graphics对象传递进去即可,如下所示
BufferedImage image = new BufferedImage(imgW + xgap * 2, imgH + ygap * 2, BufferedImage.TYPE_INT_ARGB);
 Graphics2D g = (Graphics2D) image.getGraphics();

component.print(g);  /(component代表的就是你想要把那个组件保存为图片的)

代码:

public void initImage() {
	        try {
	 image = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);
               Graphics2D g = (Graphics2D) image.getGraphics();
               print(g);
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	    }

上面的代码就是把组件画到了image中,下面就是吧image保存到本地 ,用得是JFileChooser 

                public void saveToFile() {
		 	JFileChooser chooser = new JFileChooser();
			chooser.setCurrentDirectory(null);//设置默认打开路径
			//设置当前目录。传入 null 会设置文件选择器指向用户的默认目录。此默认目录取决于操作系统。在 Windows 上通常是“我的文档”,在 Unix 上是用户的主目录。 如果作为 currentDirectory 所传入的文件不是一个目录,则使用该文件的父级作为 currentDirectory。如果该父级是不可遍历的,则会沿父级树向上查找,直到找到可遍历的目录,或者到达文件系统的根为止。
			chooser.setDialogType(JFileChooser.SAVE_DIALOG);//设置保存对话框
			chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );
			JPGFileFilter fileFilter = new JPGFileFilter();
			chooser.addChoosableFileFilter(fileFilter);
			chooser.setSelectedFile(new File("撮合详细信息"+buger.getPhoneid()+"_"+seller.getPhoneid()));
			//设置 JFileChooser,以允许用户只选择文件、只选择目录,或者可选择文件和目录。默认值是 JFilesChooser.FILES_ONLY。 
			int index = chooser.showDialog(null, "保存撮合详细文件");
			if (index == JFileChooser.APPROVE_OPTION) {
				File f = chooser.getSelectedFile();
				String fileName = chooser.getName(f) + ".jpg";
				String writePath = chooser.getCurrentDirectory().getAbsolutePath()+File.separator + fileName;
				System.out.println(writePath);
				File pathFile = new File(writePath);
				try {
					ImageIO.write(image, "jpg", pathFile);
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
	    }

 

//重写文件过滤器,设置打开类型中几种可选的文件类型,这里设了两种,一种jpg
    class JPGFileFilter extends FileFilter {
	    @Override
	    public boolean accept(File f) {
	    String nameString = f.getName();
	    return nameString.toLowerCase().endsWith(".jpg");
	    }
	    @Override
	    public String getDescription() {
	    // TODO Auto-generated method stub
	    return "jpg(*.jpg)";
	    }
    }

效果图:

保存后的图片


知识扩展:下面的代码是获得全屏的图像

Robot robot = new Robot();
//	            Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
//	            image = robot.createScreenCapture(new Rectangle(0, 0, d.width,
//	                    d.height));


转载于:https://my.oschina.net/winHerson/blog/73338

相关文章:

  • AndroidのActivity之Listview组件快速拖动
  • windows power shell 相关
  • [AX]AX2012 SSRS报表Drill through action
  • Android写日志文件类
  • 尚能饭否
  • 第九章 第一小节:打印机共享优先级
  • Linux下使用https访问站点
  • vSphere 5.0 新功能中文版说明
  • eclipse开启和去掉代码上面的快速导航栏(Toggle Breadcrumb)的方法
  • 获取矢量图层的属性值
  • wxWidgets利用tinyxml实现xml解析
  • 关于JAVA的常见误解
  • 乱起八糟用linux之快速查看进程pid
  • JS文件UTF-8格式的问题
  • 使用php mongodb扩展时比较需要注意的事项
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • SegmentFault for Android 3.0 发布
  • CEF与代理
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • JS+CSS实现数字滚动
  • js中的正则表达式入门
  • k8s 面向应用开发者的基础命令
  • KMP算法及优化
  • mysql_config not found
  • Object.assign方法不能实现深复制
  • Redis的resp协议
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 基于web的全景—— Pannellum小试
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 微信支付JSAPI,实测!终极方案
  • 自制字幕遮挡器
  • ​【已解决】npm install​卡主不动的情况
  • ​决定德拉瓦州地区版图的关键历史事件
  • #pragma multi_compile #pragma shader_feature
  • #pragma once
  • %@ page import=%的用法
  • (办公)springboot配置aop处理请求.
  • (附源码)php投票系统 毕业设计 121500
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (七)理解angular中的module和injector,即依赖注入
  • (全注解开发)学习Spring-MVC的第三天
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (四)库存超卖案例实战——优化redis分布式锁
  • (转)memcache、redis缓存
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • ./configure,make,make install的作用
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .Mobi域名介绍
  • .net core 依赖注入的基本用发
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .net MVC中使用angularJs刷新页面数据列表
  • .net 按比例显示图片的缩略图
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .ui文件相关
  • /dev/sda2 is mounted; will not make a filesystem here!