GraphApplication.java
package ac.essex.graphing.swing;
import ac.essex.graphing.plotting.Graph;
import ac.essex.graphing.plotting.PlotSettings;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.IOException;
import java.util.Vector;
/**
* Small application demonstrating the use of the graph panel in a swing gui.
*
* @author Olly Oechsle, University of Essex, Date: 05-Jun-2007
* @version 1.01 - Added suport for the Interactive Graph Panel.
*/
public class GraphApplication extends JFrame implements ActionListener, SettingsUpdateListener {
protected JButton save, exit, update;
protected JTextField minX, minY, maxX, maxY;
protected GraphPanel graphPanel;
public GraphApplication(Graph graph) {
save = new JButton("Save");
save.addActionListener(this);
exit = new JButton("Exit");
exit.addActionListener(this);
JPanel toolbar = new JPanel(new FlowLayout(FlowLayout.RIGHT));
minX = new JTextField(String.valueOf(graph.plotSettings.getMinX()));
minY = new JTextField(String.valueOf(graph.plotSettings.getMinY()));
maxX = new JTextField(String.valueOf(graph.plotSettings.getMaxX()));
maxY = new JTextField(String.valueOf(graph.plotSettings.getMaxY()));
toolbar.add(new JLabel("X: "));
toolbar.add(minX);
toolbar.add(new JLabel("-"));
toolbar.add(maxX);
toolbar.add(new JLabel(", Y:"));
toolbar.add(minY);
toolbar.add(new JLabel("-"));
toolbar.add(maxY);
update = new JButton("Update");
update.addActionListener(this);
toolbar.add(update);
toolbar.add(save);
toolbar.add(exit);
// add the panel to the middle of the BorderLayout, it will fill the window.
graphPanel = new InteractiveGraphPanel(this);
// Make sure Java Exits when the close button is clicked
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
);
// Add the toolbar and graph to the frame
Container c = getContentPane();
c.add(toolbar, BorderLayout.SOUTH);
c.add(graphPanel, BorderLayout.CENTER);
// default size of the window, the Graph Panel will be slightly smaller.
setSize(640, 480);
// window title
setTitle(Graph.VERSION);
// show the Window
setVisible(true);
graphPanel.setGraph(graph);
}
public void graphUpdated(PlotSettings settings) {
minX.setText(String.valueOf(settings.getMinX()));
minY.setText(String.valueOf(settings.getMinY()));
maxX.setText(String.valueOf(settings.getMaxX()));
maxY.setText(String.valueOf(settings.getMaxY()));
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == update) {
Graph g = graphPanel.getGraph();
g.plotSettings.setMinX(Double.parseDouble(minX.getText()));
g.plotSettings.setMaxX(Double.parseDouble(maxX.getText()));
g.plotSettings.setMinY(Double.parseDouble(minY.getText()));
g.plotSettings.setMaxY(Double.parseDouble(maxY.getText()));
graphPanel.repaint();
}
// Saves an image of the graph to disk.
if (e.getSource() == save) {
JFileChooser filechooser = new JFileChooser(System.getProperty("user.home"));
filechooser.setDialogTitle("Save Graph Image");
filechooser.setSelectedFile(new File(filechooser.getCurrentDirectory(), "graph.png"));
filechooser.setFileFilter(new FileFilter() {
public boolean accept(File f) {
String extension = f.getName().substring(f.getName().lastIndexOf('.') + 1).toLowerCase();
if (f.isDirectory()) return true;
if (extension.equals("bmp")) return true;
if (extension.equals("jpg")) return true;
if (extension.equals("png")) return true;
return false;
}
public String getDescription() {
return "Image Files: jpg, png, bmp";
}
});
int action = filechooser.showSaveDialog(this);
if (action == JFileChooser.APPROVE_OPTION) {
File f = filechooser.getSelectedFile();
try {
String extension = f.getName().substring(f.getName().lastIndexOf(".") + 1);
javax.imageio.ImageIO.write(graphPanel.getImage(), extension, f);
} catch (IOException err) {
JOptionPane.showMessageDialog(this, "Could not save image: " + err.getMessage());
}
}
}
// Exits the program.
if (e.getSource() == exit) {
System.exit(0);
}
}
}