Package prefuse.util.display

Source Code of prefuse.util.display.ExportDisplayAction

package prefuse.util.display;

import java.awt.event.ActionEvent;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.HashSet;

import javax.imageio.ImageIO;
import javax.swing.AbstractAction;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

import prefuse.Display;
import prefuse.util.io.IOLib;
import prefuse.util.io.SimpleFileFilter;


/**
* Swing ActionListener that reveals a dialog box that allows users to
* export the current Display view to an image file.
*
* @author <a href="http://jheer.org">jeffrey heer</a>
*/
public class ExportDisplayAction extends AbstractAction {

    private Display display;
    private JFileChooser chooser;
    private ScaleSelector scaler;
   
    /**
     * Create a new ExportDisplayAction for the given Display.
     * @param display the Display to capture
     */
    public ExportDisplayAction(Display display) {
        this.display = display;
    }
   
    private void init() {
        scaler  = new ScaleSelector();
        chooser = new JFileChooser();
        chooser.setDialogType(JFileChooser.SAVE_DIALOG);
        chooser.setDialogTitle("Export Prefuse Display...");
        chooser.setAcceptAllFileFilterUsed(false);
       
        HashSet seen = new HashSet();
        String[] fmts = ImageIO.getWriterFormatNames();
        for ( int i=0; i<fmts.length; i++ ) {
            String s = fmts[i].toLowerCase();
            if ( s.length() == 3 && !seen.contains(s) ) {
                seen.add(s);
                chooser.setFileFilter(new SimpleFileFilter(s,
                        s.toUpperCase()+" Image (*."+s+")"));
            }
        }
        seen.clear(); seen = null;
        chooser.setAccessory(scaler);
    }
   
    /**
     * Shows the image export dialog and processes the results.
     * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
     */
    public void actionPerformed(ActionEvent evt) {
        // lazy initialization
        if ( chooser == null )
            init();
       
        // open image save dialog
        File f = null;
        scaler.setImage(display.getOffscreenBuffer());
        int returnVal = chooser.showSaveDialog(display);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
           f = chooser.getSelectedFile();
        } else {
            return;
        }
        String format =
            ((SimpleFileFilter)chooser.getFileFilter()).getExtension();
        String ext = IOLib.getExtension(f);       
        if ( !format.equals(ext) ) {
            f = new File(f.toString()+"."+format);
        }
       
        double scale = scaler.getScale();
       
        // save image
        boolean success = false;
        try {
            OutputStream out = new BufferedOutputStream(
                                new FileOutputStream(f));
            System.out.print("Saving image "+f.getName()+", "+
                             format+" format...");
            success = display.saveImage(out, format, scale);
            out.flush();
            out.close();
            System.out.println("\tDONE");
        } catch ( Exception e ) {
            success = false;
        }
        // show result dialog on failure
        if ( !success ) {
            JOptionPane.showMessageDialog(display,
                    "Error Saving Image!",
                    "Image Save Error",
                    JOptionPane.ERROR_MESSAGE);
        }
    }
   
} // end of class SaveImageAction
TOP

Related Classes of prefuse.util.display.ExportDisplayAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.