001: import java.awt.*;
002: import java.awt.event.*;
003: import java.io.*;
004: import javax.swing.*;
005:
006: /**
007: This frame shows the toolbar and the graph.
008: */
009: public class GraphFrame extends JFrame
010: {
011: /**
012: Constructs a graph frame that displays a given graph.
013: @param graph the graph to display
014: */
015: public GraphFrame(final Graph graph)
016: {
017: setSize(FRAME_WIDTH, FRAME_HEIGHT);
018: setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
019:
020: this.graph = graph;
021:
022: constructFrameComponents();
023: // set up menus
024:
025: JMenuBar menuBar = new JMenuBar();
026: setJMenuBar(menuBar);
027: JMenu fileMenu = new JMenu("File");
028: menuBar.add(fileMenu);
029:
030: JMenuItem openItem = new JMenuItem("Open");
031: openItem.addActionListener(new
032: ActionListener()
033: {
034: public void actionPerformed(ActionEvent event)
035: {
036: openFile();
037: }
038: });
039: fileMenu.add(openItem);
040:
041: JMenuItem saveItem = new JMenuItem("Save");
042: saveItem.addActionListener(new
043: ActionListener()
044: {
045: public void actionPerformed(ActionEvent event)
046: {
047: saveFile();
048: }
049: });
050: fileMenu.add(saveItem);
051:
052: JMenuItem exitItem = new JMenuItem("Exit");
053: exitItem.addActionListener(new
054: ActionListener()
055: {
056: public void actionPerformed(ActionEvent event)
057: {
058: System.exit(0);
059: }
060: });
061: fileMenu.add(exitItem);
062:
063: JMenuItem deleteItem = new JMenuItem("Delete");
064: deleteItem.addActionListener(new
065: ActionListener()
066: {
067: public void actionPerformed(ActionEvent event)
068: {
069: panel.removeSelected();
070: }
071: });
072:
073: JMenu editMenu = new JMenu("Edit");
074: editMenu.add(deleteItem);
075: menuBar.add(editMenu);
076: }
077:
078: /**
079: Constructs the tool bar and graph panel.
080: */
081: private void constructFrameComponents()
082: {
083: toolBar = new ToolBar(graph);
084: panel = new GraphPanel(toolBar, graph);
085: scrollPane = new JScrollPane(panel);
086: Container contentPane = getContentPane();
087: contentPane.add(toolBar, BorderLayout.NORTH);
088: contentPane.add(scrollPane, BorderLayout.CENTER);
089: }
090:
091: /**
092: Asks the user to open a graph file.
093: */
094: private void openFile()
095: {
096: // let user select file
097:
098: JFileChooser fileChooser = new JFileChooser();
099: int r = fileChooser.showOpenDialog(this);
100: if (r == JFileChooser.APPROVE_OPTION)
101: {
102: // open the file that the user selected
103: try
104: {
105: File file = fileChooser.getSelectedFile();
106: ObjectInputStream in = new ObjectInputStream(
107: new FileInputStream(file));
108: graph = (Graph) in.readObject();
109: in.close();
110: Container contentPane = getContentPane();
111: contentPane.remove(scrollPane);
112: contentPane.remove(toolBar);
113: constructFrameComponents();
114: validate();
115: repaint();
116: }
117: catch (IOException exception)
118: {
119: JOptionPane.showMessageDialog(null,
120: exception);
121: }
122: catch (ClassNotFoundException exception)
123: {
124: JOptionPane.showMessageDialog(null,
125: exception);
126: }
127: }
128: }
129:
130: /**
131: Saves the current graph in a file.
132: */
133: private void saveFile()
134: {
135: JFileChooser fileChooser = new JFileChooser();
136: if (fileChooser.showSaveDialog(this)
137: == JFileChooser.APPROVE_OPTION)
138: {
139: try
140: {
141: File file = fileChooser.getSelectedFile();
142: ObjectOutputStream out = new ObjectOutputStream(
143: new FileOutputStream(file));
144: out.writeObject(graph);
145: out.close();
146: }
147: catch (IOException exception)
148: {
149: JOptionPane.showMessageDialog(null,
150: exception);
151: }
152: }
153: }
154:
155: private Graph graph;
156: private GraphPanel panel;
157: private JScrollPane scrollPane;
158: private ToolBar toolBar;
159:
160: public static final int FRAME_WIDTH = 600;
161: public static final int FRAME_HEIGHT = 400;
162: }