如何通过 JFileChooser 将 Icon 对象保存到文件中?

Posted

技术标签:

【中文标题】如何通过 JFileChooser 将 Icon 对象保存到文件中?【英文标题】:How to save Icon object into a file via JFileChooser? 【发布时间】:2011-12-05 00:56:35 【问题描述】:

我有一个 JLabel,其中保存了我的 ImageIcon,如下所示:

ImageIcon imageIcon = sample.map(); // a map method create an ImageIcon object
imageLabel.setIcon(imageIcon);
imageLabel.setVisible(true);

现在我想在单击保存项目菜单时将此 ImageIcon 对象保存到 PNG 文件中。

private void imageActionPerformed(java.awt.event.ActionEvent evt) 

    Icon pic = imageLabel.getIcon();

    JFileChooser fileChooser = new JFileChooser("C:/");  

    fileChooser.setSelectedFile(file);    

    // this filter will allow just PNG extension  
    FileFilter filter = new MyCustomFilter2();
    fileChooser.setFileFilter(filter);

    int returnVal = fileChooser.showSaveDialog(this);
    if (returnVal == JFileChooser.APPROVE_OPTION)
    
        File fileToSave = fileChooser.getSelectedFile();
     
    else
    
    System.out.println("File access cancelled by user.");
    

是的,我知道这段代码是错误的,并且缺少某些部分,我想我应该以某种方式将名为 pic 的 Icon 对象保存到 File 对象中。这是我的假设。请问我该怎么做?

感谢您的帮助,

迈克尔。

这是我的源代码

private void imageActionPerformed(java.awt.event.ActionEvent evt) 
    try
    Icon image = imageLabel.getIcon();

    BufferedImage bi = new BufferedImage(image.getIconWidth(),image.getIconHeight(),BufferedImage.TYPE_INT_RGB);
    Graphics g = bi.createGraphics();

    File file = new File("outputFile");
    JFileChooser fileChooser = new JFileChooser("C:/");  
    fileChooser.setSelectedFile(file);    

    FileFilter filter = new MyCustomFilter2();
    fileChooser.setFileFilter(filter);

    int returnVal = fileChooser.showSaveDialog(this);
    if (returnVal == JFileChooser.APPROVE_OPTION)
     
      ImageIO.write(bi, "PNG", file);
      File fileToSave = fileChooser.getSelectedFile();

     
    else
     
      System.out.println("File access cancelled by user.");
     
  

catch(IOException e)
    e.printStackTrace();
   

【问题讨论】:

【参考方案1】:

JFileChooser 返回的File 对象仅表示用户希望保存文件的磁盘位置。之后,您需要使用ImageIO.write() 将文件保存到磁盘。

例如

ImageIO.write(image, "png", file);

如果您有图标,我认为您可能需要先将其转换为 BufferedImage,然后才能保存。

【讨论】:

感谢您的回答,但它不会保存任何文件(既不为空)。我已经编辑了我的帖子并将代码放在这里,你能帮帮我吗?谢谢。 我看到您的代码创建了图形对象,但我没有看到任何绘制图标的代码。我认为有一个名为paintIcon() 的方法看起来您的代码正在将缓冲图像保存到一个名为“outputfile”的文件中,而不是用户从对话框中选择的文件。

以上是关于如何通过 JFileChooser 将 Icon 对象保存到文件中?的主要内容,如果未能解决你的问题,请参考以下文章

将 JFileChooser 添加到 Eclipse Window Builder

如何从 JFileChooser 中放置图像?

如何使用 JFileChooser 保存 file.txt?

如何在 JFileChooser 中显示文件的默认系统图标?

JFileChooser如何选择多个文件,再如何得到这些文件的路径

如何使用 JFileChooser 保存文件?