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