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