public class Scribble extends JFrame
class NewFileListener implements ActionListener
class OpenFileListener implements ActionListener
class SaveFileListener implements ActionListener
class SaveAsFileListener implements ActionListener
class ExitListener implements ActionListener
class ColorListener implements ActionListener
class AboutListener implements ActionListener
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: }