1
35
36
39
40 import javax.swing.*;
41 import javax.swing.event.*;
42 import javax.swing.text.*;
43 import javax.swing.border.*;
44 import javax.swing.colorchooser.*;
45 import javax.swing.filechooser.*;
46 import javax.accessibility.*;
47
48 import javax.swing.plaf.metal.DefaultMetalTheme;
49 import javax.swing.plaf.metal.MetalLookAndFeel;
50
51 import java.lang.reflect.*;
52 import java.awt.*;
53 import java.awt.event.*;
54 import java.beans.*;
55 import java.util.*;
56 import java.io.*;
57 import java.applet.*;
58 import java.net.*;
59
60
66 public class SwingSet2 extends JPanel {
67
68 String[] demos = {
69 "ButtonDemo",
70 "ColorChooserDemo",
71 "ComboBoxDemo",
72 "FileChooserDemo",
73 "HtmlDemo",
74 "ListDemo",
75 "OptionPaneDemo",
76 "ProgressBarDemo",
77 "ScrollPaneDemo",
78 "SliderDemo",
79 "SplitPaneDemo",
80 "TabbedPaneDemo",
81 "TableDemo",
82 "ToolTipDemo",
83 "TreeDemo"
84 };
85
86 void loadDemos() {
87 for(int i = 0; i < demos.length;) {
88 if(isApplet() && demos[i].equals("FileChooserDemo")) {
89 } else {
92 loadDemo(demos[i]);
93 }
94 i++;
95 }
96 }
97
98 private static final String mac =
100 "com.sun.java.swing.plaf.mac.MacLookAndFeel";
101 private static final String metal =
102 "javax.swing.plaf.metal.MetalLookAndFeel";
103 private static final String motif =
104 "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
105 private static final String windows =
106 "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
107 private static final String gtk =
108 "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
109
110 private static String currentLookAndFeel = metal;
112
113 private Vector demosVector = new Vector();
115
116 private static final int PREFERRED_WIDTH = 720;
118 private static final int PREFERRED_HEIGHT = 640;
119
120 private Dimension HGAP = new Dimension(1,5);
122 private Dimension VGAP = new Dimension(5,1);
123
124 private ResourceBundle bundle = null;
126
127 private DemoModule currentDemo = null;
129 private JPanel demoPanel = null;
130
131 private JDialog aboutBox = null;
133
134 private JTextField statusField = null;
136
137 private ToggleButtonToolBar toolbar = null;
139 private ButtonGroup toolbarGroup = new ButtonGroup();
140
141 private JMenuBar menuBar = null;
143 private JMenu lafMenu = null;
144 private JMenu themesMenu = null;
145 private JMenu audioMenu = null;
146 private JMenu toolTipMenu = null;
147 private ButtonGroup lafMenuGroup = new ButtonGroup();
148 private ButtonGroup themesMenuGroup = new ButtonGroup();
149 private ButtonGroup audioMenuGroup = new ButtonGroup();
150 private ButtonGroup toolTipMenuGroup = new ButtonGroup();
151
152 private JPopupMenu popupMenu = null;
154 private ButtonGroup popupMenuGroup = new ButtonGroup();
155
156 private JFrame frame = null;
158 private JWindow splashScreen = null;
159
160 private SwingSet2Applet applet = null;
162
163 private boolean DEBUG = true;
165 private int debugCounter = 0;
166
167 private JTabbedPane tabbedPane = null;
169
170 private JEditorPane demoSrcPane = null;
171
172 private JLabel splashLabel = null;
173
174 Container contentPane = null;
176
177
178 private static int numSSs = 0;
182 private static Vector swingSets = new Vector();
183
184 public SwingSet2(SwingSet2Applet applet) {
185 this(applet, null);
186 }
187
188
191 public SwingSet2(SwingSet2Applet applet, GraphicsConfiguration gc) {
192
193 this.applet = applet;
195
196 if (!isApplet()) {
199 frame = createFrame(gc);
200 }
201
202 setLayout(new BorderLayout());
204
205 setPreferredSize(new Dimension(PREFERRED_WIDTH,PREFERRED_HEIGHT));
207
208 createSplashScreen();
212
213 SwingUtilities.invokeLater(new Runnable() {
215 public void run() {
216 showSplashScreen();
217 }
218 });
219
220 initializeDemo();
221 preloadFirstDemo();
222
223 SwingUtilities.invokeLater(new Runnable() {
226 public void run() {
227 showSwingSet2();
228 hideSplash();
229 }
230 });
231
232 DemoLoadThread demoLoader = new DemoLoadThread(this);
234 demoLoader.start();
235 }
236
237
238
241 public static void main(String[] args) {
242 SwingSet2 swingset = new SwingSet2(null, GraphicsEnvironment.
244 getLocalGraphicsEnvironment().
245 getDefaultScreenDevice().
246 getDefaultConfiguration());
247 }
248
249
253
254
255 public void initializeDemo() {
256 JPanel top = new JPanel();
257 top.setLayout(new BorderLayout());
258 add(top, BorderLayout.NORTH);
259
260 menuBar = createMenus();
261 top.add(menuBar, BorderLayout.NORTH);
262
263 popupMenu = createPopupMenu();
265
266 ToolBarPanel toolbarPanel = new ToolBarPanel();
267 toolbarPanel.setLayout(new BorderLayout());
268 toolbar = new ToggleButtonToolBar();
269 toolbarPanel.add(toolbar, BorderLayout.CENTER);
270 top.add(toolbarPanel, BorderLayout.SOUTH);
271 toolbarPanel.addContainerListener(toolbarPanel);
272
273 tabbedPane = new JTabbedPane();
274 add(tabbedPane, BorderLayout.CENTER);
275 tabbedPane.getModel().addChangeListener(new TabListener());
276
277 statusField = new JTextField("");
278 statusField.setEditable(false);
279 add(statusField, BorderLayout.SOUTH);
280
281 demoPanel = new JPanel();
282 demoPanel.setLayout(new BorderLayout());
283 demoPanel.setBorder(new EtchedBorder());
284 tabbedPane.addTab("Hi There!", demoPanel);
285
286 demoSrcPane = new JEditorPane("text/html", getString("SourceCode.loading"));
288 demoSrcPane.setEditable(false);
289
290 JScrollPane scroller = new JScrollPane();
291 scroller.getViewport().add(demoSrcPane);
292
293 tabbedPane.addTab(
294 getString("TabbedPane.src_label"),
295 null,
296 scroller,
297 getString("TabbedPane.src_tooltip")
298 );
299 }
300
301 DemoModule currentTabDemo = null;
302 class TabListener implements ChangeListener {
303 public void stateChanged(ChangeEvent e) {
304 SingleSelectionModel model = (SingleSelectionModel) e.getSource();
305 boolean srcSelected = model.getSelectedIndex() == 1;
306 if(currentTabDemo != currentDemo && demoSrcPane != null && srcSelected) {
307 demoSrcPane.setText(getString("SourceCode.loading"));
308 repaint();
309 }
310 if(currentTabDemo != currentDemo && srcSelected) {
311 currentTabDemo = currentDemo;
312 setSourceCode(currentDemo);
313 }
314 }
315 }
316
317
318
321 public JMenuBar createMenus() {
322 JMenuItem mi;
323 JMenuBar menuBar = new JMenuBar();
325 menuBar.getAccessibleContext().setAccessibleName(
326 getString("MenuBar.accessible_description"));
327
328 JMenu fileMenu = (JMenu) menuBar.add(new JMenu(getString("FileMenu.file_label")));
330 fileMenu.setMnemonic(getMnemonic("FileMenu.file_mnemonic"));
331 fileMenu.getAccessibleContext().setAccessibleDescription(getString("FileMenu.accessible_description"));
332
333 createMenuItem(fileMenu, "FileMenu.about_label", "FileMenu.about_mnemonic",
334 "FileMenu.about_accessible_description", new AboutAction(this));
335
336 fileMenu.addSeparator();
337
338 createMenuItem(fileMenu, "FileMenu.open_label", "FileMenu.open_mnemonic",
339 "FileMenu.open_accessible_description", null);
340
341 createMenuItem(fileMenu, "FileMenu.save_label", "FileMenu.save_mnemonic",
342 "FileMenu.save_accessible_description", null);
343
344 createMenuItem(fileMenu, "FileMenu.save_as_label", "FileMenu.save_as_mnemonic",
345 "FileMenu.save_as_accessible_description", null);
346
347
348 if(!isApplet()) {
349 fileMenu.addSeparator();
350
351 createMenuItem(fileMenu, "FileMenu.exit_label", "FileMenu.exit_mnemonic",
352 "FileMenu.exit_accessible_description", new ExitAction(this)
353 );
354 }
355
356 if (numSSs == 0) {
358 lafMenu = (JMenu) menuBar.add(new JMenu(getString("LafMenu.laf_label")));
360 lafMenu.setMnemonic(getMnemonic("LafMenu.laf_mnemonic"));
361 lafMenu.getAccessibleContext().setAccessibleDescription(
362 getString("LafMenu.laf_accessible_description"));
363
364 mi = createLafMenuItem(lafMenu, "LafMenu.java_label", "LafMenu.java_mnemonic",
365 "LafMenu.java_accessible_description", metal);
366 mi.setSelected(true);
368 createLafMenuItem(lafMenu, "LafMenu.mac_label", "LafMenu.mac_mnemonic",
369 "LafMenu.mac_accessible_description", mac);
370
371 createLafMenuItem(lafMenu, "LafMenu.motif_label", "LafMenu.motif_mnemonic",
372 "LafMenu.motif_accessible_description", motif);
373
374 createLafMenuItem(lafMenu, "LafMenu.windows_label", "LafMenu.windows_mnemonic",
375 "LafMenu.windows_accessible_description", windows);
376
377 createLafMenuItem(lafMenu, "LafMenu.gtk_label", "LafMenu.gtk_mnemonic",
378 "LafMenu.gtk_accessible_description", gtk);
379
380 themesMenu = (JMenu) menuBar.add(new JMenu(getString("ThemesMenu.themes_label")));
382 themesMenu.setMnemonic(getMnemonic("ThemesMenu.themes_mnemonic"));
383 themesMenu.getAccessibleContext().setAccessibleDescription(
384 getString("ThemesMenu.themes_accessible_description"));
385
386 audioMenu = (JMenu) themesMenu.add(new JMenu(getString("AudioMenu.audio_label")));
388 audioMenu.setMnemonic(getMnemonic("AudioMenu.audio_mnemonic"));
389 audioMenu.getAccessibleContext().setAccessibleDescription(
390 getString("AudioMenu.audio_accessible_description"));
391
392 createAudioMenuItem(audioMenu, "AudioMenu.on_label",
393 "AudioMenu.on_mnemonic",
394 "AudioMenu.on_accessible_description",
395 new OnAudioAction(this));
396
397 mi = createAudioMenuItem(audioMenu, "AudioMenu.default_label",
398 "AudioMenu.default_mnemonic",
399 "AudioMenu.default_accessible_description",
400 new DefaultAudioAction(this));
401 mi.setSelected(true);
403 createAudioMenuItem(audioMenu, "AudioMenu.off_label",
404 "AudioMenu.off_mnemonic",
405 "AudioMenu.off_accessible_description",
406 new OffAudioAction(this));
407
408 mi = createThemesMenuItem(themesMenu, "ThemesMenu.default_label", "ThemesMenu.default_mnemonic",
410 "ThemesMenu.default_accessible_description", new DefaultMetalTheme());
411 mi.setSelected(true);
413 createThemesMenuItem(themesMenu, "ThemesMenu.aqua_label", "ThemesMenu.aqua_mnemonic",
414 "ThemesMenu.aqua_accessible_description", new AquaTheme());
415
416 createThemesMenuItem(themesMenu, "ThemesMenu.charcoal_label", "ThemesMenu.charcoal_mnemonic",
417 "ThemesMenu.charcoal_accessible_description", new CharcoalTheme());
418
419 createThemesMenuItem(themesMenu, "ThemesMenu.contrast_label", "ThemesMenu.contrast_mnemonic",
420 "ThemesMenu.contrast_accessible_description", new ContrastTheme());
421
422 createThemesMenuItem(themesMenu, "ThemesMenu.emerald_label", "ThemesMenu.emerald_mnemonic",
423 "ThemesMenu.emerald_accessible_description", new EmeraldTheme());
424
425 createThemesMenuItem(themesMenu, "ThemesMenu.ruby_label", "ThemesMenu.ruby_mnemonic",
426 "ThemesMenu.ruby_accessible_description", new RubyTheme());
427
428 toolTipMenu = (JMenu) menuBar.add(new JMenu(
430 getString("ToolTipMenu.tooltip_label")));
431 toolTipMenu.setMnemonic(getMnemonic("ToolTipMenu.tooltip_mnemonic"));
432 toolTipMenu.getAccessibleContext().setAccessibleDescription(
433 getString("ToolTipMenu.tooltip_accessible_description"));
434
435 mi = createToolTipMenuItem(toolTipMenu, "ToolTipMenu.on_label",
437 "ToolTipMenu.on_mnemonic",
438 "ToolTipMenu.on_accessible_description",
439 new ToolTipAction(this, true));
440 mi.setSelected(true);
441
442 createToolTipMenuItem(toolTipMenu, "ToolTipMenu.off_label",
443 "ToolTipMenu.off_mnemonic",
444 "ToolTipMenu.off_accessible_description",
445 new ToolTipAction(this, false));
446 }
447
448
449 if (!isApplet()) {
451 GraphicsDevice[] screens = GraphicsEnvironment.
452 getLocalGraphicsEnvironment().
453 getScreenDevices();
454 if (screens.length > 1) {
455
456 JMenu multiScreenMenu = (JMenu) menuBar.add(new JMenu(
457 getString("MultiMenu.multi_label")));
458
459 multiScreenMenu.setMnemonic(getMnemonic("MultiMenu.multi_mnemonic"));
460 multiScreenMenu.getAccessibleContext().setAccessibleDescription(
461 getString("MultiMenu.multi_accessible_description"));
462
463 createMultiscreenMenuItem(multiScreenMenu, MultiScreenAction.ALL_SCREENS);
464 for (int i = 0; i < screens.length; i++) {
465 createMultiscreenMenuItem(multiScreenMenu, i);
466 }
467 }
468 }
469
470 return menuBar;
471 }
472
473
476 public JMenuItem createToolTipMenuItem(JMenu menu, String label,
477 String mnemonic,
478 String accessibleDescription,
479 Action action) {
480 JRadioButtonMenuItem mi = (JRadioButtonMenuItem)menu.add(
481 new JRadioButtonMenuItem(getString(label)));
482 toolTipMenuGroup.add(mi);
483 mi.setMnemonic(getMnemonic(mnemonic));
484 mi.getAccessibleContext().setAccessibleDescription(getString(
485 accessibleDescription));
486 mi.addActionListener(action);
487
488 return mi;
489 }
490
491
494 public JMenuItem createAudioMenuItem(JMenu menu, String label,
495 String mnemonic,
496 String accessibleDescription,
497 Action action) {
498 JRadioButtonMenuItem mi = (JRadioButtonMenuItem) menu.add(new JRadioButtonMenuItem(getString(label)));
499 audioMenuGroup.add(mi);
500 mi.setMnemonic(getMnemonic(mnemonic));
501 mi.getAccessibleContext().setAccessibleDescription(getString(accessibleDescription));
502 mi.addActionListener(action);
503
504 return mi;
505 }
506
507
510 public JMenuItem createMenuItem(JMenu menu, String label, String mnemonic,
511 String accessibleDescription, Action action) {
512 JMenuItem mi = (JMenuItem) menu.add(new JMenuItem(getString(label)));
513 mi.setMnemonic(getMnemonic(mnemonic));
514 mi.getAccessibleContext().setAccessibleDescription(getString(accessibleDescription));
515 mi.addActionListener(action);
516 if(action == null) {
517 mi.setEnabled(false);
518 }
519 return mi;
520 }
521
522
525 public JMenuItem createThemesMenuItem(JMenu menu, String label, String mnemonic,
526 String accessibleDescription, DefaultMetalTheme theme) {
527 JRadioButtonMenuItem mi = (JRadioButtonMenuItem) menu.add(new JRadioButtonMenuItem(getString(label)));
528 themesMenuGroup.add(mi);
529 mi.setMnemonic(getMnemonic(mnemonic));
530 mi.getAccessibleContext().setAccessibleDescription(getString(accessibleDescription));
531 mi.addActionListener(new ChangeThemeAction(this, theme));
532
533 return mi;
534 }
535
536
539 public JMenuItem createLafMenuItem(JMenu menu, String label, String mnemonic,
540 String accessibleDescription, String laf) {
541 JMenuItem mi = (JRadioButtonMenuItem) menu.add(new JRadioButtonMenuItem(getString(label)));
542 lafMenuGroup.add(mi);
543 mi.setMnemonic(getMnemonic(mnemonic));
544 mi.getAccessibleContext().setAccessibleDescription(getString(accessibleDescription));
545 mi.addActionListener(new ChangeLookAndFeelAction(this, laf));
546
547 mi.setEnabled(isAvailableLookAndFeel(laf));
548
549 return mi;
550 }
551
552
555 public JMenuItem createMultiscreenMenuItem(JMenu menu, int screen) {
556 JMenuItem mi = null;
557 if (screen == MultiScreenAction.ALL_SCREENS) {
558 mi = (JMenuItem) menu.add(new JMenuItem(getString("MultiMenu.all_label")));
559 mi.setMnemonic(getMnemonic("MultiMenu.all_mnemonic"));
560 mi.getAccessibleContext().setAccessibleDescription(getString(
561 "MultiMenu.all_accessible_description"));
562 }
563 else {
564 mi = (JMenuItem) menu.add(new JMenuItem(getString("MultiMenu.single_label") + " " +
565 screen));
566 mi.setMnemonic(KeyEvent.VK_0 + screen);
567 mi.getAccessibleContext().setAccessibleDescription(getString(
568 "MultiMenu.single_accessible_description") + " " + screen);
569
570 }
571 mi.addActionListener(new MultiScreenAction(this, screen));
572 return mi;
573 }
574
575 public JPopupMenu createPopupMenu() {
576 JPopupMenu popup = new JPopupMenu("JPopupMenu demo");
577
578 createPopupMenuItem(popup, "LafMenu.java_label", "LafMenu.java_mnemonic",
579 "LafMenu.java_accessible_description", metal);
580
581 createPopupMenuItem(popup, "LafMenu.mac_label", "LafMenu.mac_mnemonic",
582 "LafMenu.mac_accessible_description", mac);
583
584 createPopupMenuItem(popup, "LafMenu.motif_label", "LafMenu.motif_mnemonic",
585 "LafMenu.motif_accessible_description", motif);
586
587 createPopupMenuItem(popup, "LafMenu.windows_label", "LafMenu.windows_mnemonic",
588 "LafMenu.windows_accessible_description", windows);
589
590 createPopupMenuItem(popup, "LafMenu.gtk_label", "LafMenu.gtk_mnemonic",
591 "LafMenu.gtk_accessible_description", gtk);
592
593 InputMap map = getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
595 map.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, InputEvent.CTRL_MASK),
596 "postMenuAction");
597 getActionMap().put("postMenuAction", new ActivatePopupMenuAction(this, popup));
598
599 return popup;
600 }
601
602
605 public JMenuItem createPopupMenuItem(JPopupMenu menu, String label, String mnemonic,
606 String accessibleDescription, String laf) {
607 JMenuItem mi = menu.add(new JMenuItem(getString(label)));
608 popupMenuGroup.add(mi);
609 mi.setMnemonic(getMnemonic(mnemonic));
610 mi.getAccessibleContext().setAccessibleDescription(getString(accessibleDescription));
611 mi.addActionListener(new ChangeLookAndFeelAction(this, laf));
612 mi.setEnabled(isAvailableLookAndFeel(laf));
613
614 return mi;
615 }
616
617
618
622 public void preloadFirstDemo() {
623 DemoModule demo = addDemo(new InternalFrameDemo(this));
624 setDemo(demo);
625 }
626
627
628
631 public DemoModule addDemo(DemoModule demo) {
632 demosVector.addElement(demo);
633 SwingUtilities.invokeLater(new SwingSetRunnable(this, demo) {
635 public void run() {
636 SwitchToDemoAction action = new SwitchToDemoAction(swingset, (DemoModule) obj);
637 JToggleButton tb = swingset.getToolBar().addToggleButton(action);
638 swingset.getToolBarGroup().add(tb);
639 if(swingset.getToolBarGroup().getSelection() == null) {
640 tb.setSelected(true);
641 }
642 tb.setText(null);
643 tb.setToolTipText(((DemoModule)obj).getToolTip());
644
645 if(demos[demos.length-1].equals(obj.getClass().getName())) {
646 setStatus(getString("Status.popupMenuAccessible"));
647 }
648
649 }
650 });
651 return demo;
652 }
653
654
655
658 public void setDemo(DemoModule demo) {
659 currentDemo = demo;
660
661 JComponent currentDemoPanel = demo.getDemoPanel();
663 SwingUtilities.updateComponentTreeUI(currentDemoPanel);
664
665 demoPanel.removeAll();
666 demoPanel.add(currentDemoPanel, BorderLayout.CENTER);
667
668 tabbedPane.setSelectedIndex(0);
669 tabbedPane.setTitleAt(0, demo.getName());
670 tabbedPane.setToolTipTextAt(0, demo.getToolTip());
671 }
672
673
674
678 public void showSwingSet2() {
679 if(!isApplet() && getFrame() != null) {
680 JFrame f = getFrame();
682 f.setTitle(getString("Frame.title"));
683 f.getContentPane().add(this, BorderLayout.CENTER);
684 f.pack();
685
686 Rectangle screenRect = f.getGraphicsConfiguration().getBounds();
687 Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(
688 f.getGraphicsConfiguration());
689
690 int centerWidth = screenRect.width < f.getSize().width ?
692 screenRect.x :
693 screenRect.x + screenRect.width/2 - f.getSize().width/2;
694 int centerHeight = screenRect.height < f.getSize().height ?
695 screenRect.y :
696 screenRect.y + screenRect.height/2 - f.getSize().height/2;
697
698 centerHeight = centerHeight < screenInsets.top ?
699 screenInsets.top : centerHeight;
700
701 f.setLocation(centerWidth, centerHeight);
702 f.show();
703 numSSs++;
704 swingSets.add(this);
705 }
706 }
707
708
711 public void createSplashScreen() {
712 splashLabel = new JLabel(createImageIcon("Splash.jpg", "Splash.accessible_description"));
713
714 if(!isApplet()) {
715 splashScreen = new JWindow(getFrame());
716 splashScreen.getContentPane().add(splashLabel);
717 splashScreen.pack();
718 Rectangle screenRect = getFrame().getGraphicsConfiguration().getBounds();
719 splashScreen.setLocation(
720 screenRect.x + screenRect.width/2 - splashScreen.getSize().width/2,
721 screenRect.y + screenRect.height/2 - splashScreen.getSize().height/2);
722 }
723 }
724
725 public void showSplashScreen() {
726 if(!isApplet()) {
727 splashScreen.show();
728 } else {
729 add(splashLabel, BorderLayout.CENTER);
730 validate();
731 repaint();
732 }
733 }
734
735
738 public void hideSplash() {
739 if(!isApplet()) {
740 splashScreen.setVisible(false);
741 splashScreen = null;
742 splashLabel = null;
743 }
744 }
745
746
750
753 void loadDemo(String classname) {
754 setStatus(getString("Status.loading") + getString(classname + ".name"));
755 DemoModule demo = null;
756 try {
757 Class demoClass = Class.forName(classname);
758 Constructor demoConstructor = demoClass.getConstructor(new Class[]{SwingSet2.class});
759 demo = (DemoModule) demoConstructor.newInstance(new Object[]{this});
760 addDemo(demo);
761 } catch (Exception e) {
762 System.out.println("Error occurred loading demo: " + classname);
763 }
764 }
765
766
777 protected boolean isAvailableLookAndFeel(String laf) {
778 try {
779 Class lnfClass = Class.forName(laf);
780 LookAndFeel newLAF = (LookAndFeel)(lnfClass.newInstance());
781 return newLAF.isSupportedLookAndFeel();
782 } catch(Exception e) { return false;
784 }
785 }
786
787
788
791 public boolean isApplet() {
792 return (applet != null);
793 }
794
795
798 public SwingSet2Applet getApplet() {
799 return applet;
800 }
801
802
803
806 public JFrame getFrame() {
807 return frame;
808 }
809
810
813 public JMenuBar getMenuBar() {
814 return menuBar;
815 }
816
817
820 public ToggleButtonToolBar getToolBar() {
821 return toolbar;
822 }
823
824
827 public ButtonGroup getToolBarGroup() {
828 return toolbarGroup;
829 }
830
831
835 public Container getContentPane() {
836 if(contentPane == null) {
837 if(getFrame() != null) {
838 contentPane = getFrame().getContentPane();
839 } else if (getApplet() != null) {
840 contentPane = getApplet().getContentPane();
841 }
842 }
843 return contentPane;
844 }
845
846
850 public static JFrame createFrame(GraphicsConfiguration gc) {
851 JFrame frame = new JFrame(gc);
852 if (numSSs == 0) {
853 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
854 } else {
855 WindowListener l = new WindowAdapter() {
856 public void windowClosing(WindowEvent e) {
857 numSSs--;
858 swingSets.remove(this);
859 }
860 };
861 frame.addWindowListener(l);
862 }
863 return frame;
864 }
865
866
867
870 public void setStatus(String s) {
871 SwingUtilities.invokeLater(new SwingSetRunnable(this, s) {
873 public void run() {
874 swingset.statusField.setText((String) obj);
875 }
876 });
877 }
878
879
880
883 public String getString(String key) {
884 String value = null;
885 try {
886 value = getResourceBundle().getString(key);
887 } catch (MissingResourceException e) {
888 System.out.println("java.util.MissingResourceException: Couldn't find value for: " + key);
889 }
890 if(value == null) {
891 value = "Could not find resource: " + key + " ";
892 }
893 return value;
894 }
895
896
900 public ResourceBundle getResourceBundle() {
901 if(bundle == null) {
902 bundle = ResourceBundle.getBundle("resources.swingset");
903 }
904 return bundle;
905 }
906
907
911 public char getMnemonic(String key) {
912 return (getString(key)).charAt(0);
913 }
914
915
918 public ImageIcon createImageIcon(String filename, String description) {
919 String path = "/resources/images/" + filename;
920 return new ImageIcon(getClass().getResource(path));
921 }
922
923
926 public void debug(String s) {
927 if(DEBUG) {
928 System.out.println((debugCounter++) + ": " + s);
929 }
930 }
931
932
935 public void setLookAndFeel(String laf) {
936 if(currentLookAndFeel != laf) {
937 currentLookAndFeel = laf;
938 themesMenu.setEnabled(laf == metal);
939 updateLookAndFeel();
940 }
941 }
942
943
946 public void updateLookAndFeel() {
947 try {
948 UIManager.setLookAndFeel(currentLookAndFeel);
949 for (Iterator itr = swingSets.iterator(); itr.hasNext(); ) {
950 SwingSet2 ss = (SwingSet2)itr.next();
951 SwingUtilities.updateComponentTreeUI(ss);
952 }
953 if (!isApplet()) {
955 SwingUtilities.updateComponentTreeUI(getFrame());
956 } else {
957 SwingUtilities.updateComponentTreeUI(getApplet());
958 }
959 SwingUtilities.updateComponentTreeUI(popupMenu);
960
961 } catch (Exception ex) {
962 System.out.println("Failed loading L&F: " + currentLookAndFeel);
963 System.out.println(ex);
964 }
965
966 for (int i = 0; i < demosVector.size(); i++) {
968 DemoModule demo = (DemoModule) demosVector.elementAt(i);
969 if(currentDemo != demo) {
970 SwingUtilities.invokeLater(new SwingSetRunnable(this, demo) {
972 public void run() {
973 SwingUtilities.updateComponentTreeUI(((DemoModule)obj).getDemoPanel());
974 }
975 });
976 }
977 }
978
979 }
980
981
984 public void setSourceCode(DemoModule demo) {
985 SwingUtilities.invokeLater(new SwingSetRunnable(this, demo) {
987 public void run() {
988 swingset.demoSrcPane.setText(((DemoModule)obj).getSourceCode());
989 swingset.demoSrcPane.setCaretPosition(0);
990
991 }
992 });
993 }
994
995 static Insets zeroInsets = new Insets(1,1,1,1);
999 protected class ToggleButtonToolBar extends JToolBar {
1000 public ToggleButtonToolBar() {
1001 super();
1002 }
1003
1004 JToggleButton addToggleButton(Action a) {
1005 JToggleButton tb = new JToggleButton(
1006 (String)a.getValue(Action.NAME),
1007 (Icon)a.getValue(Action.SMALL_ICON)
1008 );
1009 tb.setMargin(zeroInsets);
1010 tb.setText(null);
1011 tb.setEnabled(a.isEnabled());
1012 tb.setToolTipText((String)a.getValue(Action.SHORT_DESCRIPTION));
1013 tb.setAction(a);
1014 add(tb);
1015 return tb;
1016 }
1017 }
1018
1019 class ToolBarPanel extends JPanel implements ContainerListener {
1023
1024 public boolean contains(int x, int y) {
1025 Component c = getParent();
1026 if (c != null) {
1027 Rectangle r = c.getBounds();
1028 return (x >= 0) && (x < r.width) && (y >= 0) && (y < r.height);
1029 }
1030 else {
1031 return super.contains(x,y);
1032 }
1033 }
1034
1035 public void componentAdded(ContainerEvent e) {
1036 Container c = e.getContainer().getParent();
1037 if (c != null) {
1038 c.getParent().validate();
1039 c.getParent().repaint();
1040 }
1041 }
1042
1043 public void componentRemoved(ContainerEvent e) {
1044 Container c = e.getContainer().getParent();
1045 if (c != null) {
1046 c.getParent().validate();
1047 c.getParent().repaint();
1048 }
1049 }
1050 }
1051
1052
1056
1063 class SwingSetRunnable implements Runnable {
1064 protected SwingSet2 swingset;
1065 protected Object obj;
1066
1067 public SwingSetRunnable(SwingSet2 swingset, Object obj) {
1068 this.swingset = swingset;
1069 this.obj = obj;
1070 }
1071
1072 public void run() {
1073 }
1074 }
1075
1076
1077
1081 public class SwitchToDemoAction extends AbstractAction {
1082 SwingSet2 swingset;
1083 DemoModule demo;
1084
1085 public SwitchToDemoAction(SwingSet2 swingset, DemoModule demo) {
1086 super(demo.getName(), demo.getIcon());
1087 this.swingset = swingset;
1088 this.demo = demo;
1089 }
1090
1091 public void actionPerformed(ActionEvent e) {
1092 swingset.setDemo(demo);
1093 }
1094 }
1095
1096 class OkAction extends AbstractAction {
1097 JDialog aboutBox;
1098
1099 protected OkAction(JDialog aboutBox) {
1100 super("OkAction");
1101 this.aboutBox = aboutBox;
1102 }
1103
1104 public void actionPerformed(ActionEvent e) {
1105 aboutBox.setVisible(false);
1106 }
1107 }
1108
1109 class ChangeLookAndFeelAction extends AbstractAction {
1110 SwingSet2 swingset;
1111 String laf;
1112 protected ChangeLookAndFeelAction(SwingSet2 swingset, String laf) {
1113 super("ChangeTheme");
1114 this.swingset = swingset;
1115 this.laf = laf;
1116 }
1117
1118 public void actionPerformed(ActionEvent e) {
1119 swingset.setLookAndFeel(laf);
1120 }
1121 }
1122
1123 class ActivatePopupMenuAction extends AbstractAction {
1124 SwingSet2 swingset;
1125 JPopupMenu popup;
1126 protected ActivatePopupMenuAction(SwingSet2 swingset, JPopupMenu popup) {
1127 super("ActivatePopupMenu");
1128 this.swingset = swingset;
1129 this.popup = popup;
1130 }
1131
1132 public void actionPerformed(ActionEvent e) {
1133 Dimension invokerSize = getSize();
1134 Dimension popupSize = popup.getPreferredSize();
1135 popup.show(swingset, (invokerSize.width - popupSize.width) / 2,
1136 (invokerSize.height - popupSize.height) / 2);
1137 }
1138 }
1139
1140 class OnAudioAction extends AbstractAction {
1142 SwingSet2 swingset;
1143 protected OnAudioAction(SwingSet2 swingset) {
1144 super("Audio On");
1145 this.swingset = swingset;
1146 }
1147 public void actionPerformed(ActionEvent e) {
1148 UIManager.put("AuditoryCues.playList",
1149 UIManager.get("AuditoryCues.allAuditoryCues"));
1150 swingset.updateLookAndFeel();
1151 }
1152 }
1153
1154 class DefaultAudioAction extends AbstractAction {
1156 SwingSet2 swingset;
1157 protected DefaultAudioAction(SwingSet2 swingset) {
1158 super("Audio Default");
1159 this.swingset = swingset;
1160 }
1161 public void actionPerformed(ActionEvent e) {
1162 UIManager.put("AuditoryCues.playList",
1163 UIManager.get("AuditoryCues.defaultCueList"));
1164 swingset.updateLookAndFeel();
1165 }
1166 }
1167
1168 class OffAudioAction extends AbstractAction {
1170 SwingSet2 swingset;
1171 protected OffAudioAction(SwingSet2 swingset) {
1172 super("Audio Off");
1173 this.swingset = swingset;
1174 }
1175 public void actionPerformed(ActionEvent e) {
1176 UIManager.put("AuditoryCues.playList",
1177 UIManager.get("AuditoryCues.noAuditoryCues"));
1178 swingset.updateLookAndFeel();
1179 }
1180 }
1181
1182 class ToolTipAction extends AbstractAction {
1184 SwingSet2 swingset;
1185 boolean status;
1186 protected ToolTipAction(SwingSet2 swingset, boolean status) {
1187 super("ToolTip Control");
1188 this.swingset = swingset;
1189 this.status = status;
1190 }
1191
1192 public void actionPerformed(ActionEvent e) {
1193 ToolTipManager.sharedInstance().setEnabled(status);
1194 }
1195 }
1196
1197 class ChangeThemeAction extends AbstractAction {
1198 SwingSet2 swingset;
1199 DefaultMetalTheme theme;
1200 protected ChangeThemeAction(SwingSet2 swingset, DefaultMetalTheme theme) {
1201 super("ChangeTheme");
1202 this.swingset = swingset;
1203 this.theme = theme;
1204 }
1205
1206 public void actionPerformed(ActionEvent e) {
1207 MetalLookAndFeel.setCurrentTheme(theme);
1208 swingset.updateLookAndFeel();
1209 }
1210 }
1211
1212 class ExitAction extends AbstractAction {
1213 SwingSet2 swingset;
1214 protected ExitAction(SwingSet2 swingset) {
1215 super("ExitAction");
1216 this.swingset = swingset;
1217 }
1218
1219 public void actionPerformed(ActionEvent e) {
1220 System.exit(0);
1221 }
1222 }
1223
1224 class AboutAction extends AbstractAction {
1225 SwingSet2 swingset;
1226 protected AboutAction(SwingSet2 swingset) {
1227 super("AboutAction");
1228 this.swingset = swingset;
1229 }
1230
1231 public void actionPerformed(ActionEvent e) {
1232 if(aboutBox == null) {
1233 JPanel panel = new AboutPanel(swingset);
1235 panel.setLayout(new BorderLayout());
1236
1237 aboutBox = new JDialog(swingset.getFrame(), getString("AboutBox.title"), false);
1238 aboutBox.getContentPane().add(panel, BorderLayout.CENTER);
1239
1240 JPanel buttonpanel = new JPanel();
1242 buttonpanel.setOpaque(false);
1243 JButton button = (JButton) buttonpanel.add(
1244 new JButton(getString("AboutBox.ok_button_text"))
1245 );
1246 panel.add(buttonpanel, BorderLayout.SOUTH);
1247
1248 button.addActionListener(new OkAction(aboutBox));
1249 }
1250 aboutBox.pack();
1251 Point p = swingset.getLocationOnScreen();
1252 aboutBox.setLocation(p.x + 10, p.y +10);
1253 aboutBox.show();
1254 }
1255 }
1256
1257 class MultiScreenAction extends AbstractAction {
1258 static final int ALL_SCREENS = -1;
1259 int screen;
1260 protected MultiScreenAction(SwingSet2 swingset, int screen) {
1261 super("MultiScreenAction");
1262 this.screen = screen;
1263 }
1264
1265 public void actionPerformed(ActionEvent e) {
1266 GraphicsDevice[] gds = GraphicsEnvironment.
1267 getLocalGraphicsEnvironment().
1268 getScreenDevices();
1269 if (screen == ALL_SCREENS) {
1270 for (int i = 0; i < gds.length; i++) {
1271 SwingSet2 swingset = new SwingSet2(null,
1272 gds[i].getDefaultConfiguration());
1273 }
1274 }
1275 else {
1276 SwingSet2 swingset = new SwingSet2(null,
1277 gds[screen].getDefaultConfiguration());
1278 }
1279 }
1280 }
1281
1282
1286 class DemoLoadThread extends Thread {
1287 SwingSet2 swingset;
1288
1289 public DemoLoadThread(SwingSet2 swingset) {
1290 this.swingset = swingset;
1291 }
1292
1293 public void run() {
1294 swingset.loadDemos();
1295 }
1296 }
1297
1298 class AboutPanel extends JPanel {
1299 ImageIcon aboutimage = null;
1300 SwingSet2 swingset = null;
1301
1302 public AboutPanel(SwingSet2 swingset) {
1303 this.swingset = swingset;
1304 aboutimage = swingset.createImageIcon("About.jpg", "AboutBox.accessible_description");
1305 setOpaque(false);
1306 }
1307
1308 public void paint(Graphics g) {
1309 aboutimage.paintIcon(this, g, 0, 0);
1310 super.paint(g);
1311 }
1312
1313 public Dimension getPreferredSize() {
1314 return new Dimension(aboutimage.getIconWidth(),
1315 aboutimage.getIconHeight());
1316 }
1317 }
1318
1319}
1320
1321