Source of Scribble.java


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