package org.chartsy.main.utils; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.prefs.Preferences; import javax.imageio.ImageIO; import javax.swing.JComponent; import javax.swing.JFileChooser; import javax.swing.filechooser.FileFilter; import org.chartsy.main.ChartFrame; import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; import org.openide.util.NbPreferences; import org.openide.windows.WindowManager; /** * * @author viorel.gheba */ public class ImageExporter { private static ImageExporter instance; private File defaultFolder = null; private JFileChooser fileChooser; private FileFilter jpegFilter; private FileFilter pngFilter; public static ImageExporter getDefault() { if (instance == null) instance = new ImageExporter(); return instance; } private ImageExporter() {} public void export(ChartFrame chartFrame) { JComponent chartPanel = chartFrame.getMainPanel(); if (chartPanel != null) { try { Preferences p = NbPreferences.root().node("/org/chartsy/imageexporter"); String folder = p.get("default_folder", null); if (folder != null) defaultFolder = new File(folder); else defaultFolder = null; if (fileChooser == null) { fileChooser = new JFileChooser(); fileChooser.setDialogType(JFileChooser.SAVE_DIALOG); fileChooser.setDialogTitle("Export Image"); fileChooser.setAcceptAllFileFilterUsed(true); fileChooser.setCurrentDirectory(defaultFolder); jpegFilter = new FileFilter() { public boolean accept(File file) { String filename = file.getName(); return file.isDirectory() || filename.endsWith(".jpeg") || filename.endsWith(".jpg"); } public String getDescription() { return "JPEG (*.jpeg *.jpg)"; } }; fileChooser.addChoosableFileFilter(jpegFilter); pngFilter = new FileFilter() { public boolean accept(File file) { String filename = file.getName(); return file.isDirectory() || filename.endsWith(".png"); } public String getDescription() { return "PNG (*.png)"; } }; fileChooser.addChoosableFileFilter(pngFilter); } fileChooser.setSelectedFile(new File(chartFrame.getChartData().getStock().getKey())); defaultFolder = fileChooser.getCurrentDirectory(); p.put("default_folder", fileChooser.getCurrentDirectory().getAbsolutePath()); if (fileChooser.showSaveDialog(WindowManager.getDefault().getMainWindow()) == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); String filename = file.getName(); BufferedImage image = chartFrame.getBufferedImage(chartPanel.getWidth(), chartPanel.getHeight()); FileFilter fileFilter = fileChooser.getFileFilter(); String format; if (fileFilter == jpegFilter) { if (!filename.endsWith(".jpeg") && !filename.endsWith(".jpg")) file = new File(file.getAbsolutePath() + ".jpg"); format = "jpg"; } else { if (!filename.endsWith(".png")) file = new File(file.getAbsolutePath() + ".png"); format = "png"; } Object retval = NotifyDescriptor.YES_OPTION; if (file.exists()) { NotifyDescriptor d = new NotifyDescriptor.Confirmation( "This file already exists. Do you want to overwrite it?", "Overwrite", NotifyDescriptor.YES_NO_OPTION); retval = DialogDisplayer.getDefault().notify(d); } if (retval.equals(NotifyDescriptor.YES_OPTION)) ImageIO.write(image, format, file); else export(chartFrame); } } catch (IOException ex) { ex.printStackTrace(); } } } public File getExportedFile(ChartFrame chartFrame, Class resource) { File file = null; JComponent chartPanel = chartFrame.getMainPanel(); if (chartPanel != null) { try { String format = "png"; file = File.createTempFile("tmp_chart", format); BufferedImage image = chartFrame.getBufferedImage(chartPanel.getWidth(), chartPanel.getHeight()); ImageIO.write(image, format, file); } catch (IOException ex) { ex.printStackTrace(); } } return file; } }