org.freehep.graphicsio.emf.EMFViewer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of freehep-graphicsio-emf Show documentation
Show all versions of freehep-graphicsio-emf Show documentation
FreeHEP Enhanced Metafile Format Driver
The newest version!
// Copyright 2007 FreeHEP
package org.freehep.graphicsio.emf;
import org.freehep.graphicsbase.swing.ExtensionFileFilter;
import javax.swing.JFrame;
import javax.swing.JFileChooser;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.BufferedInputStream;
/**
* Simple frame to display EMF images.
*
* @author Steffen Greiffenberg
* @version $ID$
*/
public class EMFViewer extends JFrame {
/**
* Prefix for the TITLE
*/
private static String TITLE = "Freehep EMF Viewer";
/**
* Title for the Button
*/
private static String LOAD_BUTTON_TITLE = "Open EMF";
/**
* Title for the Button
*/
private static String ZOOMIN__BUTTON_TITLE = "Zoom in";
/**
* Title for the Button
*/
private static String ZOOMOUT_BUTTON_TITLE = "Zoom out";
/**
* simple panel for displaying an EMF
*/
private EMFPanel emfPanel = new EMFPanel();
/**
* used to open EMF-Files
*/
private JFileChooser fileChooser = new JFileChooser();
public EMFViewer() {
initGUI();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 300);
}
/**
* creates the content of tha frame
*/
private void initGUI() {
setTitle(TITLE);
// create a panel for the window content
getContentPane().setLayout(new BorderLayout(0, 0));
JPanel mainPanel = new JPanel();
getContentPane().add(mainPanel);
// layout the mainPanel
mainPanel.setLayout(new BorderLayout(3, 3));
mainPanel.add(
BorderLayout.CENTER,
new JScrollPane(emfPanel));
// prepare the filechooser
fileChooser.addChoosableFileFilter(
new ExtensionFileFilter("emf", "Encapsulated Metafile"));
// panel for buttons
JPanel buttonPanel = new JPanel(
new FlowLayout(FlowLayout.RIGHT, 3, 3));
mainPanel.add(
BorderLayout.SOUTH,
buttonPanel);
// button to zoom in
JButton zoomInButton = new JButton(ZOOMIN__BUTTON_TITLE);
zoomInButton.addActionListener(new ZoomInAction());
buttonPanel.add(zoomInButton);
// button to zoom out
JButton zoomOutButton = new JButton(ZOOMOUT_BUTTON_TITLE);
zoomOutButton.addActionListener(new ZoomOutAction());
buttonPanel.add(zoomOutButton);
// loadButton to open files
JButton loadButton = new JButton(LOAD_BUTTON_TITLE);
loadButton.addActionListener(new OpenFileAction());
buttonPanel.add(loadButton);
}
/**
* displays the file and
* @param emfFile File to show
*/
public void show(File emfFile) {
try {
FileInputStream fis = new FileInputStream(emfFile);
EMFInputStream emf = new EMFInputStream(new BufferedInputStream(fis));
EMFRenderer renderer = new EMFRenderer(emf);
emfPanel.setRenderer(renderer);
// set the window title
setTitle(TITLE + " - " + emfFile.getName());
} catch (Exception e) {
e.printStackTrace();
}
// show the frame
if (!isVisible()) {
setVisible(true);
}
}
/**
* Uses the fileChooser to open a file.
* Uses the emfPanel to display the file.
*/
private class OpenFileAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
int result = fileChooser.showOpenDialog(EMFViewer.this);
if (result == JFileChooser.APPROVE_OPTION) {
show(fileChooser.getSelectedFile());
}
}
}
/**
* zoom the panel in
*/
private class ZoomInAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
emfPanel.zoomIn();
}
}
/**
* zoom the panel out
*/
private class ZoomOutAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
emfPanel.zoomOut();
}
}
}