做项目时,有意需求需要把弹出的对话框保存为图片。
重点知识:
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));