    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: }