The Java Program: Main.java

  1 import java.awt.Toolkit;
  2 import java.awt.Event;
  3 import java.awt.BorderLayout;
  4 import java.awt.event.*;
  5 import javax.swing.*;
  6 
  7 import java.util.Date;
  8 import java.util.Arrays;
  9 import java.io.IOException;
 10 
 11 public class Main extends JFrame {
 12 
 13    private static final String title = "Localized Menubar Deomonstration";
 14 
 15    private static void createAndShowGUI () {
 16       JFrame.setDefaultLookAndFeelDecorated(true);
 17       final JFrame frame = new JFrame (title);
 18       final JTextArea ta = new JTextArea(10, 60);
 19       frame.getContentPane().add(new JScrollPane(ta), BorderLayout.CENTER);
 20       frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
 21       frame.pack();
 22       frame.setVisible(true);
 23    }
 24 
 25 
 26    public static void main (String[] args) {
 27       final JFrame frame = new Main ();
 28       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 29       frame.pack();
 30       frame.setVisible(true);
 31    }
 32 
 33    private final Action newAction   = new LocalizableAction ("new");
 34    private final Action openAction  = new LocalizableAction ("open");
 35    private final Action closeAction = new LocalizableAction ("close");
 36    private final Action saveAction  = new LocalizableAction ("save");
 37    private final Action quitAction  = new QuitAction ();
 38    private final Action printAction = new LocalizableAction ("print");
 39 
 40    public Main() {
 41       super (title);
 42       final JTextArea ta = new JTextArea(10, 50);
 43       getContentPane().add(new JScrollPane(ta), BorderLayout.CENTER);
 44 
 45       final JToolBar tool = new JToolBar();
 46       getContentPane().add (tool, BorderLayout.NORTH);
 47 
 48       tool.add (new JButton (newAction));
 49       tool.add (new JButton (openAction));
 50       tool.add (new JButton (closeAction));
 51       tool.add (new JButton (saveAction));
 52       tool.add (new JButton (quitAction));
 53       tool.add (new JButton (new ScreenshotAction()));
 54 
 55       class EchoListener implements ActionListener {
 56          public void actionPerformed (ActionEvent ev) {
 57             System.out.println (ev.getActionCommand());
 58          }
 59       }
 60       final EchoListener e = new EchoListener ();
 61 
 62       final JMenuBar bar = new JMenuBar();
 63 
 64       final JMenu file_menu = new JMenu (new LocalizableAction("file"));
 65 
 66       final JMenuItem new_item  = new JMenuItem (newAction);
 67       final JMenuItem open      = new JMenuItem (openAction);
 68       final JMenuItem close     = new JMenuItem (closeAction);
 69       final JMenuItem save      = new JMenuItem (saveAction);
 70       final JMenuItem save_as   = ItemFactory.createMenuItem ("Save As ...", 'A', e);
 71       final JMenuItem page_setup= ItemFactory.createMenuItem ("Page Setup ...", 'U', e);
 72       final JMenuItem print     = new JMenuItem (printAction);
 73       final JMenuItem pref      = ItemFactory.createMenuItem ("Preferences", 'R', e);
 74       final JMenuItem color     = new JMenuItem (new ColorAction(java.awt.Color.BLUE));
 75       final JMenuItem exit      = new JMenuItem (quitAction);
 76 
 77       file_menu.add (new_item);
 78       file_menu.add (open);
 79       file_menu.add (close);
 80       file_menu.addSeparator();
 81       file_menu.add (save);
 82       file_menu.add (save_as);
 83       file_menu.addSeparator();
 84       file_menu.add (page_setup);
 85       file_menu.add (print);
 86       file_menu.addSeparator();
 87       file_menu.add (pref);
 88       file_menu.addSeparator();
 89       file_menu.add (color);
 90       file_menu.add (exit);
 91       bar.add (file_menu);
 92 
 93       final JMenu edit_menu = new JMenu ("Edit");
 94       edit_menu.setMnemonic ('E');
 95       edit_menu.setToolTipText ("Menu of edit operations");
 96 
 97       final JMenuItem undo  = ItemFactory.createMenuItem ("Undo",  'U', 'Z', e);
 98       final JMenuItem redo  = ItemFactory.createMenuItem ("Redo",  'R', 'Y', e);
 99       final JMenuItem cut   = ItemFactory.createMenuItem ("Cut",   'T', 'X', e);
100       final JMenuItem copy  = ItemFactory.createMenuItem ("Copy",  'C', 'C', e);
101       final JMenuItem paste = ItemFactory.createMenuItem ("Paste", 'P', 'V', e);
102 
103       final JMenuItem find   = ItemFactory.createMenuItem ("Find...",    'F', 'F', e);
104       final JMenuItem findA  = ItemFactory.createMenuItem ("Find Again", 'D', 'G', e);
105       findA.setEnabled (false);
106       final JMenuItem select = ItemFactory.createMenuItem ("Select All", 'A', 'A', e);
107 
108       edit_menu.add (undo);
109       edit_menu.add (redo);
110       edit_menu.addSeparator();
111       edit_menu.add (cut);
112       edit_menu.add (copy);
113       edit_menu.add (paste);
114       edit_menu.addSeparator();
115       edit_menu.add (find);
116       edit_menu.add (findA);
117       edit_menu.add (select);
118       bar.add (edit_menu);
119 
120       final JMenu text_menu = new JMenu ("Text");
121       text_menu.setMnemonic ('T');
122       text_menu.setToolTipText ("Menu of text formatting operations");
123 
124       final JMenu font_submenu = new JMenu ("Font");
125       font_submenu.setMnemonic ('F');
126       font_submenu.setToolTipText ("Menu of font families");
127       text_menu.add (font_submenu);
128 
129       final JMenu style_submenu = new JMenu ("Style");
130       style_submenu.setMnemonic ('S');
131 
132       final JCheckBoxMenuItem bold   = ItemFactory.createCheckBox ("Bold",   'B', 'B', e);
133       final JCheckBoxMenuItem italic = ItemFactory.createCheckBox ("Italic", 'I', 'I', e);
134       final JCheckBoxMenuItem under  = ItemFactory.createCheckBox ("Under",  'U', 'U', e);
135       style_submenu.add (bold);
136       style_submenu.add (italic);
137       style_submenu.add (under);
138 
139       text_menu.add (style_submenu);
140 
141       final JMenu size_submenu = new JMenu ("Size");
142       size_submenu.setMnemonic ('Z');
143       text_menu.add (size_submenu);
144 
145       text_menu.addSeparator();
146 
147       final ButtonGroup group = new ButtonGroup ();
148       final JRadioButtonMenuItem left = new JRadioButtonMenuItem ("Align Left");
149       left.setMnemonic('L');
150       group.add (left);
151       text_menu.add (left);
152 
153       final JRadioButtonMenuItem mid = new JRadioButtonMenuItem ("Align Middle");
154       mid.setMnemonic('M');
155       group.add (mid);
156       text_menu.add (mid);
157 
158       final JRadioButtonMenuItem right = new JRadioButtonMenuItem ("Align Right");
159       right.setMnemonic('R');
160       group.add (right);
161       text_menu.add (right);
162 
163       final JRadioButtonMenuItem just = new JRadioButtonMenuItem ("Justify");
164       just.setMnemonic('J');
165       just.setEnabled (false);
166       group.add (just);
167       text_menu.add (just);
168 
169       bar.add (text_menu);
170 
171       class XL implements ActionListener {
172          public void actionPerformed (ActionEvent ev) {
173             final JComboBox cb = (JComboBox) ev.getSource();
174             final LocalePanel ll = (LocalePanel) cb.getSelectedItem();
175             ll.changeLocale();
176          }
177       }
178 
179       final JComboBox box = new JComboBox(LocalePanel.getList().toArray());
180       box.setEditable (false);
181       box.setMaximumRowCount (6);
182 
183 
184       // top, left, bottom, right, in pixels
185       //box.setBorder (BorderFactory.createMatteBorder (3,4,1,4,java.awt.Color.red));
186       box.setBorder (BorderFactory.createEmptyBorder (3,4,1,4));
187 
188 
189       /*
190         Try to prevent horizontal expansion by setting maximum width
191       */
192       box.setMaximumSize (new java.awt.Dimension (175,50));
193 
194 
195 
196       box.addActionListener (new XL());
197       box.setSelectedItem (LocalePanel.setCurrent ());
198 
199       // Default renderer just knows how to render strings and icons.  Other objects
200       // are rendered as strings via toString().
201       box.setRenderer (new PanelRenderer ());
202 
203 
204       bar.add (Box.createRigidArea (new java.awt.Dimension (2,40)));
205       bar.add (box);
206       bar.add (Box.createRigidArea (new java.awt.Dimension (2,40)));
207 
208 
209       // Can't seem to space this custom component
210       //bar.add (Box.createHorizontalStrut(4));
211       final JComponent l = new DateForBar();
212       l.setMaximumSize (new java.awt.Dimension (225, 30));
213       l.setPreferredSize (new java.awt.Dimension (225, 30));
214       l.setBorder (BorderFactory.createEmptyBorder (0,4,0,4));
215       bar.add (l);
216 
217 
218 
219       // Shove remaining menus to the right of the menu bar
220       bar.add (Box.createHorizontalGlue());
221 
222       // JMenuBar.setHelpMenu () is not implemented yet!
223       final JMenu help_menu = new JMenu ("Help");
224       help_menu.setMnemonic ('H');
225 
226       final JMenuItem contents  = ItemFactory.createMenuItem ("Contents", 'C', e);
227       final JMenuItem tutorial  = ItemFactory.createMenuItem ("Tutorial", 'T', e);
228       final JMenuItem index     = ItemFactory.createMenuItem ("Index", 'I', e);
229       final JMenuItem about     = ItemFactory.createMenuItem ("About", 'A', e);
230       help_menu.add (contents);
231       help_menu.add (tutorial);
232       help_menu.add (index);
233       help_menu.addSeparator();
234       help_menu.add (about);
235       bar.add (help_menu);
236       setJMenuBar (bar);
237    }
238 }