Source of Scribble.java


  1: 
  2: package scribble2; 
  3: 
  4: import java.awt.*;
  5: import java.awt.event.*;
  6: import java.io.*;
  7: import javax.swing.*; 
  8: 
  9: public class Scribble extends JFrame {
 10: 
 11:   public Scribble() {
 12:     setTitle("Scribble Pad");
 13:     canvas = new ScribbleCanvas(); 
 14:     getContentPane().setLayout(new BorderLayout()); 
 15:     getContentPane().add(createMenuBar(), BorderLayout.NORTH); 
 16:     getContentPane().add(canvas, BorderLayout.CENTER);
 17:     addWindowListener(new WindowAdapter() {
 18:         public void windowClosing(WindowEvent e) {
 19:           if (exitAction != null) { 
 20:             exitAction.actionPerformed(new ActionEvent(Scribble.this, 0, null)); 
 21:           }
 22:         }
 23:       }); 
 24:   }
 25: 
 26:   protected JMenuBar createMenuBar() {
 27:     JMenuBar menuBar = new JMenuBar();
 28:     JMenu menu; 
 29:     JMenuItem mi;
 30: 
 31:     // File menu 
 32:     menu = new JMenu("File"); 
 33:     menuBar.add(menu); 
 34: 
 35:     mi = new JMenuItem("New");
 36:     menu.add(mi);
 37:     mi.addActionListener(new NewFileListener()); 
 38: 
 39:     mi = new JMenuItem("Open");
 40:     menu.add(mi);
 41:     mi.addActionListener(new OpenFileListener()); 
 42: 
 43:     mi = new JMenuItem("Save");
 44:     menu.add(mi);
 45:     mi.addActionListener(new SaveFileListener()); 
 46: 
 47:     mi = new JMenuItem("Save As");
 48:     menu.add(mi);
 49:     mi.addActionListener(new SaveAsFileListener()); 
 50: 
 51:     menu.add(new JSeparator()); 
 52: 
 53:     exitAction = new ExitListener(); 
 54:     mi = new JMenuItem("Exit");
 55:     menu.add(mi);
 56:     mi.addActionListener(exitAction); 
 57: 
 58:     // option menu
 59:     menu = new JMenu("Option"); 
 60:     menuBar.add(menu); 
 61: 
 62:     mi = new JMenuItem("Color");
 63:     menu.add(mi);
 64:     mi.addActionListener(new ColorListener()); 
 65: 
 66:     // horizontal space 
 67:     menuBar.add(Box.createHorizontalGlue());
 68: 
 69:     // Help menu 
 70:     menu = new JMenu("Help"); 
 71:     menuBar.add(menu); 
 72: 
 73:     mi = new JMenuItem("About");
 74:     menu.add(mi);
 75:     mi.addActionListener(new AboutListener()); 
 76: 
 77:     return menuBar; 
 78:   }
 79: 
 80:   protected void newFile() { 
 81:     currentFilename = null; 
 82:     canvas.newFile(); 
 83:     setTitle("Scribble Pad");
 84:   }
 85: 
 86:   protected void openFile(String filename) { 
 87:     currentFilename = filename; 
 88:     canvas.openFile(filename);
 89:     setTitle("Scribble Pad [" + currentFilename + "]"); 
 90:   }
 91: 
 92:   protected void saveFile() { 
 93:     if (currentFilename == null) {
 94:       currentFilename = "Untitled"; 
 95:     }
 96:     canvas.saveFile(currentFilename); 
 97:     setTitle("Scribble Pad [" + currentFilename + "]");
 98:   }
 99: 
100:   protected void saveFileAs(String filename) { 
101:     currentFilename = filename; 
102:     canvas.saveFile(filename); 
103:     setTitle("Scribble Pad [" + currentFilename + "]");
104:   }
105: 
106:   class NewFileListener implements ActionListener { 
107:     
108:     public void actionPerformed(ActionEvent e) {
109:       newFile(); 
110:     }
111: 
112:   }
113: 
114:   class OpenFileListener implements ActionListener { 
115: 
116:     public void actionPerformed(ActionEvent e) {
117:       int retval = chooser.showDialog(null, "Open");
118:       if (retval == JFileChooser.APPROVE_OPTION) {
119:         File theFile = chooser.getSelectedFile();
120:         if (theFile != null) {
121:           if (theFile.isFile()) {
122:             String filename = chooser.getSelectedFile().getAbsolutePath();
123:             openFile(filename); 
124:           }
125:         }
126:       }
127:     }
128: 
129:   }
130: 
131:   class SaveFileListener implements ActionListener { 
132:     
133:     public void actionPerformed(ActionEvent e) {
134:       saveFile(); 
135:     }
136: 
137:   }
138: 
139:   class SaveAsFileListener implements ActionListener { 
140: 
141:     public void actionPerformed(ActionEvent e) {
142:       int retval = chooser.showDialog(null, "Save As");
143:       if (retval == JFileChooser.APPROVE_OPTION) {
144:         File theFile = chooser.getSelectedFile();
145:         if (theFile != null) {
146:           if (!theFile.isDirectory()) {
147:             String filename = chooser.getSelectedFile().getAbsolutePath();
148:             saveFileAs(filename); 
149:           }
150:         }
151:       }
152:     }
153: 
154:   }
155: 
156:   class ExitListener implements ActionListener { 
157:     
158:     public void actionPerformed(ActionEvent e) {
159:       int result = JOptionPane.showConfirmDialog(null,
160:                                                  "Do you want to exit Scribble Pad?", 
161:                                                  "Exit Scribble Pad?",
162:                                                  JOptionPane.YES_NO_OPTION);
163:       if (result == JOptionPane.YES_OPTION) {
164:         saveFile(); 
165:         System.exit(0); 
166:       }
167:     }
168: 
169:   }
170: 
171:   class ColorListener implements ActionListener { 
172:     
173:     public void actionPerformed(ActionEvent e) {
174:       Color result = dialog.showDialog();
175:       if (result != null) { 
176:         canvas.setCurColor(result);
177:       }
178:     }
179: 
180:     protected ColorDialog dialog = 
181:       new ColorDialog(Scribble.this, "Choose color", canvas.getCurColor());
182: 
183:   }
184: 
185:   class AboutListener implements ActionListener { 
186:     
187:     public void actionPerformed(ActionEvent e) {
188:       JOptionPane.showMessageDialog(null, 
189:                                     "DrawingPad version 1.0\nCopyright (c) Xiaoping Jia 2002", "About", 
190:                                     JOptionPane.INFORMATION_MESSAGE); 
191:     }
192: 
193:   }
194: 
195:   public static void main(String[] args) {
196:     int width = 600; 
197:     int height = 400; 
198:     JFrame frame = new Scribble();
199:     frame.setSize(width, height);
200:     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
201:     frame.setLocation(screenSize.width/2 - width/2,
202:                       screenSize.height/2 - height/2);
203:     frame.show();
204:   }
205: 
206:   protected String currentFilename = null; 
207:   protected ScribbleCanvas canvas; 
208:   protected ActionListener exitAction; 
209:   protected JFileChooser chooser = new JFileChooser(".");
210: 
211: }