Как сохранить объект Icon в файл через JFileChooser? - PullRequest
1 голос
/ 05 декабря 2011

У меня есть 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.");
    }
}

Да, я знаю, что этот код неправильный, а какая-то часть отсутствует, я думаю, что мне нужно каким-то образом сохранить объект Icon с именем pic в объект 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 Ответ

2 голосов
/ 05 декабря 2011

Объект File, возвращаемый JFileChooser, просто представляет местоположение на диске, где пользователь хотел бы сохранить файл.После этого вы захотите использовать ImageIO.write () для сохранения файла на диск.

Например,

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

Если у вас есть значок, я думаю,вам может потребоваться преобразовать его в BufferedImage, прежде чем вы сможете сохранить его.

...