1  /* 
  2   * File: FrameMenus.java
  3   *
  4   * This applet/application demonstrates the following classes:  
  5   * TextArea, Frame, MenuBar, Menu, MenuItem, CheckboxMenuItem, 
  6   * and MenuShortcut.
  7   *
  8   * Note that MenuItems generate ActionEvents, while CheckboxMenuItems 
  9   * generate ItemEvents.
 10   *
 11   */
 12  
 13  import java.applet.Applet;
 14  import java.awt.*;
 15  import java.awt.event.*;
 16  
 17  public class FrameMenus extends Applet implements ActionListener {
 18  
 19    private Button button;
 20    
 21    public void init() {
 22      button = new Button( "New Web Browser" );
 23      add( button );
 24      button.addActionListener( this );    
 25    }
 26    
 27    public void actionPerformed( ActionEvent e ) {
 28      new NewWebBrowser();
 29    }
 30    
 31    // This applet also runs as an application:
 32    public static void main( String[] args ) {
 33      new NewWebBrowser();
 34    }
 35    
 36  }
 37  
 38  // Simulate a Netscape web browser window:
 39  class NewWebBrowser extends Frame {
 40  
 41    protected static int num_windows = 0;     // number of open windows
 42    
 43    String ellipsis = "...";                  // ellipsis for menu items
 44    // char ellipsis = '\u2026';              // Why doesn't this work?
 45  
 46    // GUI components:
 47    MenuBar menubar;
 48    TextArea textarea;
 49    
 50    // Constructor:
 51    public NewWebBrowser() {
 52    
 53      // Invoke the constructor of the superclass:
 54      super( "Web Browser" );
 55      
 56      num_windows++;                          // update window counter
 57      
 58      // Set frame parameters:
 59      setSize( 700, 800 );
 60      setFont( new Font( "SansSerif", Font.BOLD, 12 ) );
 61      
 62      textarea = new TextArea();
 63      add( textarea, BorderLayout.CENTER );
 64      textarea.setFont( new Font( "Monospaced", Font.BOLD, 10 ) );
 65      
 66      menubar = new MenuBar();
 67      menubar.add( new FileMenu() );
 68      menubar.add( new EditMenu() );
 69      menubar.add( new ViewMenu() );
 70      menubar.add( new GoMenu() );
 71      menubar.add( new BookmarksMenu() );
 72      menubar.add( new OptionsMenu() );
 73      menubar.add( new DirectoryMenu() );
 74      menubar.add( new WindowMenu() );
 75      menubar.setHelpMenu( new HelpMenu() );  // the Help menu is special
 76      
 77      setMenuBar( menubar );
 78      setVisible( true );
 79    }
 80    
 81    class FileMenu extends Menu implements ActionListener {
 82    
 83      // Menu item names:
 84      MenuItem newWebBrowserItem,
 85               newMailMessageItem,
 86               mailDocumentItem,
 87               openLocationItem,
 88               openFileItem,
 89               saveAsItem,
 90               uploadFileItem,
 91               printItem,
 92               closeItem,
 93               exitItem;
 94      
 95      // Menu constructor:
 96      public FileMenu() {
 97      
 98        // Invoke the constructor of the superclass:
 99        super( "File" );
100  
101        // Menu items with shortcuts:
102        newWebBrowserItem  
103          = new MenuItem( "New Web Browser", 
104                          new MenuShortcut( KeyEvent.VK_N ) );
105        newMailMessageItem 
106          = new MenuItem( "New Mail Message", 
107                          new MenuShortcut( KeyEvent.VK_M ) );
108        mailDocumentItem   
109          = new MenuItem( "Mail Document" );
110          
111        openLocationItem   
112          = new MenuItem( "Open Location" + ellipsis, 
113                          new MenuShortcut( KeyEvent.VK_L ) );
114        openFileItem       
115          = new MenuItem( "Open File" + ellipsis, 
116                          new MenuShortcut( KeyEvent.VK_O ) );
117        saveAsItem         
118          = new MenuItem( "Save As" + ellipsis, 
119                          new MenuShortcut( KeyEvent.VK_S ) );
120        uploadFileItem     
121          = new MenuItem( "Upload File" + ellipsis );
122          
123        printItem          
124          = new MenuItem( "Print" + ellipsis, 
125                          new MenuShortcut( KeyEvent.VK_P ) );
126        closeItem          
127          = new MenuItem( "Close", 
128                          new MenuShortcut( KeyEvent.VK_W ) );
129        exitItem           
130          = new MenuItem( "Exit", 
131                          new MenuShortcut( KeyEvent.VK_Q ) );
132        
133        // Build the menu:
134        add( newWebBrowserItem );
135        add( newMailMessageItem );
136        add( mailDocumentItem );
137        addSeparator();
138        add( openLocationItem );
139        add( openFileItem );
140        add( saveAsItem );
141        add( uploadFileItem );
142        addSeparator();
143        add( printItem );
144        addSeparator();
145        add( closeItem );
146        add( exitItem );
147        
148        // Disable menu item(s):
149        uploadFileItem.setEnabled( false );
150  
151        // Listen for ActionEvents generated by menu items:
152        newWebBrowserItem.addActionListener( this );
153        exitItem.addActionListener( this );
154      }
155    
156      // ActionEvent handler:
157      public void actionPerformed( ActionEvent e ) {
158      
159        // File:New
160        if ( e.getSource() == newWebBrowserItem ) {
161          new NewWebBrowser();
162          
163        // File:Exit
164        } else if ( e.getSource() == exitItem ) {
165          setVisible( false );
166          dispose();
167          if ( --num_windows == 0 ) {
168            // System.exit(0);
169          }
170        }
171      }
172      
173    }
174  
175    class EditMenu extends Menu implements ActionListener {
176    
177      // Menu constructor:
178      public EditMenu() {
179      
180        // Invoke the constructor of the superclass:
181        super( "Edit" );
182  
183      }
184    
185      // ActionEvent handler:
186      public void actionPerformed( ActionEvent e ) {
187      }
188      
189    }
190  
191    class ViewMenu extends Menu implements ActionListener {
192    
193      // Menu constructor:
194      public ViewMenu() {
195      
196        // Invoke the constructor of the superclass:
197        super( "View" );
198  
199      }
200    
201      // ActionEvent handler:
202      public void actionPerformed( ActionEvent e ) {
203      }
204      
205    }
206  
207    class GoMenu extends Menu implements ActionListener {
208    
209      // Menu constructor:
210      public GoMenu() {
211      
212        // Invoke the constructor of the superclass:
213        super( "Go" );
214  
215      }
216    
217      // ActionEvent handler:
218      public void actionPerformed( ActionEvent e ) {
219      }
220      
221    }
222  
223    class BookmarksMenu extends Menu implements ActionListener {
224    
225      // Menu constructor:
226      public BookmarksMenu() {
227      
228        // Invoke the constructor of the superclass:
229        super( "Bookmarks" );
230  
231      }
232    
233      // ActionEvent handler:
234      public void actionPerformed( ActionEvent e ) {
235      }
236      
237    }
238  
239    class OptionsMenu extends Menu implements ActionListener {
240    
241      // Menu item names:
242      MenuItem generalPrefs,
243               mailAndNewsPrefs,
244               networkPrefs,
245               securityPrefs;
246      
247      // Checkable menu item names:
248      CheckboxMenuItem showMenubarItem,
249                       showToolbarItem,
250                       showLocationItem,
251                       showDirectoryButtonsItem,
252                       showJavaConsoleItem;
253      
254      // Menu constructor:
255      public OptionsMenu() {
256      
257        // Invoke the constructor of the superclass:
258        super( "Options" );
259  
260        // Menu items:
261        generalPrefs = new MenuItem( "General Preferences" + ellipsis );
262        mailAndNewsPrefs = new MenuItem( "Mail and News Preferences" + ellipsis );
263        networkPrefs = new MenuItem( "Network Preferences" + ellipsis );
264        securityPrefs = new MenuItem( "Security Preferences" + ellipsis );
265        
266        // Checkable menu items:
267        showMenubarItem = new CheckboxMenuItem( "Show Menubar" );
268        showMenubarItem.setState( true );  // checked by default
269        showToolbarItem = new CheckboxMenuItem( "Show Toolbar" );
270        showLocationItem = new CheckboxMenuItem( "Show Location" );
271        showDirectoryButtonsItem = new CheckboxMenuItem( "Show Directory Buttons" );
272        showJavaConsoleItem = new CheckboxMenuItem( "Show Java Console" );
273        
274        // Build the menu:
275        add( generalPrefs );
276        add( mailAndNewsPrefs );
277        add( networkPrefs );
278        add( securityPrefs );
279        addSeparator();
280        add( showMenubarItem );
281        add( showToolbarItem );
282        add( showLocationItem );
283        add( showDirectoryButtonsItem );
284        add( showJavaConsoleItem );
285        addSeparator();
286        add( new DocEncodingSubmenu() );
287    
288      }
289    
290      // ActionEvent handler:
291      public void actionPerformed( ActionEvent e ) {
292      }
293      
294      class DocEncodingSubmenu extends Menu implements ActionListener {
295      
296        // Menu constructor:
297        public DocEncodingSubmenu() {
298        
299          // Invoke the constructor of the superclass:
300          super( "Document Encoding" );
301    
302          // Build the menu:
303          add( new CheckboxMenuItem( "Western (Latin-1)", true ) );
304          addSeparator();
305          add( new CheckboxMenuItem( "Central European (Latin-2)" ) );
306          addSeparator();
307          add( new CheckboxMenuItem( "Japanese (Auto-Detect)" ) );
308          add( new CheckboxMenuItem( "Japanese (Shift-JIS)" ) );
309          add( new CheckboxMenuItem( "Japanese (EUC-JP)" ) );
310          // (many more such items omitted)
311      
312        }
313      
314        // ActionEvent handler:
315        public void actionPerformed( ActionEvent e ) {
316        }
317        
318      }
319  
320    }
321  
322    class DirectoryMenu extends Menu implements ActionListener {
323    
324      // Menu constructor:
325      public DirectoryMenu() {
326      
327        // Invoke the constructor of the superclass:
328        super( "Directory" );
329  
330      }
331    
332      // ActionEvent handler:
333      public void actionPerformed( ActionEvent e ) {
334      }
335      
336    }
337  
338    class WindowMenu extends Menu implements ActionListener {
339    
340      // Menu constructor:
341      public WindowMenu() {
342      
343        // Invoke the constructor of the superclass:
344        super( "Window" );
345  
346      }
347    
348      // ActionEvent handler:
349      public void actionPerformed( ActionEvent e ) {
350      }
351      
352    }
353  
354    class HelpMenu extends Menu implements ActionListener {
355    
356      // Menu constructor:
357      public HelpMenu() {
358      
359        // Invoke the constructor of the superclass:
360        super( "Help" );
361  
362        // Build the menu:
363        add( new MenuItem( "About Netscape" ) );
364        add( new MenuItem( "About Plug-ins" ) );
365        add( new MenuItem( "Registration Information" ) );
366        add( new MenuItem( "Software" ) );
367        addSeparator();
368        add( new MenuItem( "Handbook" ) );
369    
370      }
371    
372      // ActionEvent handler:
373      public void actionPerformed( ActionEvent e ) {
374      }
375      
376    }
377  
378  }
379