home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / inprise / JSAMPLES.Z / SwingSet.java < prev    next >
Text File  |  1998-05-08  |  77KB  |  1,973 lines

  1. /*
  2.  * @(#)SwingSet.java    1.55 98/02/23
  3.  *
  4.  * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  *
  19.  */
  20.  
  21. import com.sun.java.swing.*;
  22. import com.sun.java.swing.preview.*;
  23. import com.sun.java.swing.event.*;
  24. import com.sun.java.swing.text.*;
  25. import com.sun.java.swing.border.*;
  26. import com.sun.java.accessibility.*;
  27.  
  28. import java.awt.*;
  29. import java.awt.event.*;
  30. import java.util.*;
  31. import java.io.*;
  32. import java.applet.*;
  33. import java.net.*;
  34.  
  35. /**
  36.  * A demo that shows all of the Swing components.
  37.  *
  38.  * @version 1.55 02/23/98
  39.  * @author Jeff Dinkins (code, code, and more code)
  40.  * @author Chester Rose (graphic artist)
  41.  * @author Arnaud Weber (applet support)
  42.  * @author Peter Korn   (accessbility support)
  43.  * @author Georges Saab (menus, toolbars)
  44.  */
  45. public class SwingSet extends JPanel
  46. {
  47.     // This
  48.     SwingSet swing;
  49.  
  50.     // The Frame
  51.     public static JFrame frame;
  52.  
  53.     // Current ui
  54.     public String currentUI = "Metal";
  55.  
  56.     // JavaDoc URL
  57.     public static String javaDocPath = null;
  58.  
  59.     // The width and height of the frame
  60.     public static int WIDTH = 790;
  61.     public static int HEIGHT = 550;
  62.     public static int INITIAL_WIDTH = 400;
  63.     public static int INITIAL_HEIGHT = 200;
  64.  
  65.     public final static Dimension hpad5 = new Dimension(5,1);
  66.     public final static Dimension hpad10 = new Dimension(10,1);
  67.     public final static Dimension hpad20 = new Dimension(20,1);
  68.     public final static Dimension hpad25 = new Dimension(25,1);
  69.     public final static Dimension hpad30 = new Dimension(30,1);
  70.     public final static Dimension hpad40 = new Dimension(40,1);
  71.     public final static Dimension hpad80 = new Dimension(80,1);
  72.  
  73.     public final static Dimension vpad5 = new Dimension(1,5);
  74.     public final static Dimension vpad10 = new Dimension(1,10);
  75.     public final static Dimension vpad20 = new Dimension(1,20);
  76.     public final static Dimension vpad25 = new Dimension(1,25);
  77.     public final static Dimension vpad30 = new Dimension(1,30);
  78.     public final static Dimension vpad40 = new Dimension(1,40);
  79.     public final static Dimension vpad80 = new Dimension(1,80);
  80.  
  81.     public final static Insets insets0 = new Insets(0,0,0,0);
  82.     public final static Insets insets5 = new Insets(5,5,5,5);
  83.     public final static Insets insets10 = new Insets(10,10,10,10);
  84.     public final static Insets insets15 = new Insets(15,15,15,15);
  85.     public final static Insets insets20 = new Insets(20,20,20,20);
  86.  
  87.     public final static Border emptyBorder0 = new EmptyBorder(0,0,0,0);
  88.     public final static Border emptyBorder5 = new EmptyBorder(5,5,5,5);
  89.     public final static Border emptyBorder10 = new EmptyBorder(10,10,10,10);
  90.     public final static Border emptyBorder15 = new EmptyBorder(15,15,15,15);
  91.     public final static Border emptyBorder20 = new EmptyBorder(20,20,20,20);
  92.  
  93.     public final static Border etchedBorder10 = new CompoundBorder(
  94.                                                         new EtchedBorder(),
  95.                                                         emptyBorder10);
  96.  
  97.     public final static Border raisedBorder = new BevelBorder(BevelBorder.RAISED);
  98.     public final static Border lightLoweredBorder = new BevelBorder(BevelBorder.LOWERED, 
  99.                                                           Color.white, Color.gray);
  100.     public final static Border loweredBorder = new SoftBevelBorder(BevelBorder.LOWERED);
  101.  
  102.     public Font defaultFont = new Font("Dialog", Font.PLAIN, 12);
  103.     public Font boldFont = new Font("Dialog", Font.BOLD, 12);
  104.     public Font bigFont = new Font("Dialog", Font.PLAIN, 18);
  105.     public Font bigBoldFont = new Font("Dialog", Font.BOLD, 18);
  106.     public Font reallyBigFont = new Font("Dialog", Font.PLAIN, 18);
  107.     public Font reallyBigBoldFont = new Font("Dialog", Font.BOLD, 24);
  108.  
  109.     // L&F radio buttons
  110.     JRadioButtonMenuItem macMenuItem;
  111.     JRadioButtonMenuItem metalMenuItem;
  112.     JRadioButtonMenuItem motifMenuItem;
  113.     JRadioButtonMenuItem windowsMenuItem;
  114.  
  115.     // Some images used in the demo
  116.     public ImageIcon blueDot;
  117.     public ImageIcon redDot;
  118.     public ImageIcon invisibleDot;
  119.  
  120.     public ImageIcon duke2;
  121.     public ImageIcon dukeSnooze;
  122.     public ImageIcon dukeWave;
  123.     public ImageIcon dukeWaveRed;
  124.     public ImageIcon dukeMagnify;
  125.  
  126.     public ImageIcon cow;
  127.  
  128.     public ImageIcon tiger;
  129.     public ImageIcon littleTiger;
  130.  
  131.     public ImageIcon upButton;
  132.     public ImageIcon downButton;
  133.     public ImageIcon disabledButton;
  134.  
  135.  
  136.     // The panels used in the demo
  137.     public JPanel borderPanel;
  138.     public JPanel borderedPanePanel;
  139.     public JPanel buttonPanel;
  140.     public JPanel checkboxPanel;
  141.     public JPanel comboBoxPanel;
  142.     public JPanel dateChooserPanel;
  143.     public JPanel debugGraphicsPanel;
  144.     public JPanel htmlPanel;
  145.     public JPanel labelPanel;
  146.     public JPanel listBoxPanel;
  147.     public JPanel logoPanel;
  148.     public JPanel menuPanel;
  149.     public JPanel progressBarPanel;
  150.     public JPanel radioButtonPanel;
  151.     public JPanel scrollPanePanel;
  152.     public JPanel sliderPanel;
  153.     public JPanel splitPanePanel;
  154.     public JPanel tablePanel;
  155.     public JPanel textPanel;
  156.     public JPanel toggleButtonPanel;
  157.     public JPanel toolTipPanel;
  158.     public JPanel treePanel;
  159.     public JPanel windowPanel;
  160.  
  161.     // Track progress
  162.     public static int totalPanels = 23; // PENDING(jeff) there has got to be a better way...
  163.     public static int currentProgressValue;
  164.     public static JLabel progressLabel = null;
  165.     public static JProgressBar progressBar = null;
  166.  
  167.     // Used when switching to DebugGraphicsPanel
  168.     public Component previousPage;
  169.  
  170.     // Button controls
  171.     public Vector currentControls;
  172.     public Vector labels = new Vector();
  173.     public Vector buttons = new Vector();
  174.     public Vector checkboxes = new Vector();
  175.     public Vector radioButtons = new Vector();
  176.     public Vector toggleButtons = new Vector();
  177.  
  178.     // Some components used in the demo
  179.     public JTabbedPane tabbedPane;
  180.     public JPanel borderedPane;
  181.     public JList listBox;
  182.     public TabPlacementChanger tabPlacement;
  183.     public int toolTipIndex;
  184.  
  185.     // This != null if we are an applet
  186.     java.applet.Applet applet;
  187.     static SwingSet instance;
  188.  
  189.     public SwingSet() {
  190.     this(null);
  191.     }
  192.  
  193.     /*******************************************/
  194.     /****** Construct the SwingSet demo ********/
  195.     /*******************************************/
  196.     public SwingSet(java.applet.Applet anApplet) {
  197.     super(true); // double buffer
  198.  
  199.     instance = this;
  200.     applet = anApplet;
  201.     loadImages();
  202.     swing = this;
  203.     setName("Main SwingSet Panel");
  204.     DebugGraphics.setFlashTime(30);
  205.     setFont(defaultFont);
  206.     setLayout(new BorderLayout());
  207.         currentProgressValue = 0;
  208.  
  209.     // Add a MenuBar
  210.     add(createMenuBar(), BorderLayout.NORTH);
  211.  
  212.     // Create a tab pane
  213.     tabbedPane = new JTabbedPane();
  214.  
  215.         // Add magic key to enable timer logging
  216.     // PENDING(Arnaud) - is this really needed? 
  217.         tabbedPane.registerKeyboardAction(new ToggleLogging(),
  218.              KeyStroke.getKeyStroke('l', InputEvent.ALT_MASK), WHEN_IN_FOCUSED_WINDOW);
  219.         
  220.     // Add the tab to the center
  221.     add(tabbedPane, BorderLayout.CENTER);
  222.  
  223.     // Add the Button panel
  224.     progressLabel.setText("Loading Title Page");
  225.     ImageIcon swingLogo = loadImageIcon("images/swingLabelSmall.gif","Swing!");
  226.     JPanel logoPanel = createLogo();
  227.     tabbedPane.addTab("", swingLogo, logoPanel);
  228.  
  229.     // set the Tab's AccessibleName 'cause we are using a graphic only
  230.     tabbedPane.getAccessibleContext().getAccessibleChild(tabbedPane.indexOfTab(swingLogo)).getAccessibleContext().setAccessibleName("Swing!");
  231.  
  232.     tabbedPane.setSelectedIndex(0);
  233.     progressBar.setValue(++currentProgressValue);
  234.  
  235.     // Buttons
  236.     progressLabel.setText("Loading Button Example");
  237.     buttonPanel = new ButtonPanel(this);
  238.     tabbedPane.addTab("Buttons", null, buttonPanel);
  239.     progressBar.setValue(++currentProgressValue);
  240.  
  241.     // RadioButtons
  242.     progressLabel.setText("Loading RadioButton Example");
  243.     radioButtonPanel = new RadioButtonPanel(this);
  244.     tabbedPane.addTab("RadioButtons", null, radioButtonPanel);
  245.     progressBar.setValue(++currentProgressValue);
  246.  
  247.     // ToggleButtons
  248.     progressLabel.setText("Loading ToggleButton Example");
  249.     toggleButtonPanel = new ToggleButtonPanel(this);
  250.     tabbedPane.addTab("ToggleButtons", null, toggleButtonPanel);
  251.     progressBar.setValue(++currentProgressValue);
  252.  
  253.     // CheckBoxMenuItem
  254.     progressLabel.setText("Loading Checkbox Example");
  255.     checkboxPanel = new CheckboxPanel(this);
  256.     tabbedPane.addTab("Checkboxes", null, checkboxPanel);
  257.     progressBar.setValue(++currentProgressValue);
  258.  
  259.     // Labels
  260.     progressLabel.setText("Loading Label Example");
  261.     labelPanel = new LabelPanel(this);
  262.     tabbedPane.addTab("Labels", null, labelPanel);
  263.     progressBar.setValue(++currentProgressValue);
  264.  
  265.     // Borders
  266.     progressLabel.setText("Loading Border Example");
  267.     borderPanel = new BorderPanel();
  268.     tabbedPane.addTab("Borders", null, borderPanel);
  269.     progressBar.setValue(++currentProgressValue);
  270.  
  271.     // ComboBox
  272.     progressLabel.setText("Loading ComboBox Example");
  273.     comboBoxPanel = new ComboBoxPanel(this);
  274.     tabbedPane.addTab("ComboBox",null,comboBoxPanel);
  275.     progressBar.setValue(++currentProgressValue);
  276.     // This is unfortunately needed right now, since JComboBox
  277.     // has no way to know when an ancestor is removed from
  278.     // the hierarchy so that it can hide its JPopupMenu.  We
  279.     // do this explicitly here so that menus aren't left
  280.     // hanging when you switch tabs -- better underlying 
  281.     // support will exist in future versions.
  282.     tabbedPane.addContainerListener(new ContainerAdapter() {
  283.         public void componentRemoved(ContainerEvent e) {
  284.         Component c = e.getChild();
  285.         if ((c == comboBoxPanel) && (c instanceof ComboBoxPanel)) 
  286.             ((ComboBoxPanel)c).hideAllPopups();
  287.         }
  288.  
  289.     });
  290.  
  291.     // DebugGraphics
  292.     progressLabel.setText("Loading DebugGraphics Example");
  293.     debugGraphicsPanel = new DebugGraphicsPanel(this);
  294.     tabbedPane.addTab("DebugGraphics", null, debugGraphicsPanel);
  295.     progressBar.setValue(++currentProgressValue);
  296.  
  297.     // Internal Frame
  298.     progressLabel.setText("Loading Internal Frame Example");
  299.     windowPanel = new InternalWindowPanel();
  300.     tabbedPane.addTab("Internal Frame", null, windowPanel);
  301.     progressBar.setValue(++currentProgressValue);
  302.  
  303.     // ListBox
  304.     progressLabel.setText("Loading ListBox Example");
  305.     listBoxPanel = new ListPanel(this);
  306.     tabbedPane.addTab("ListBox", null, listBoxPanel);
  307.     progressBar.setValue(++currentProgressValue);
  308.  
  309.     // Menus
  310.     progressLabel.setText("Loading Menu Example");
  311.     menuPanel = createMenus();
  312.     tabbedPane.addTab("Menus & ToolBars", null, menuPanel);
  313.     progressBar.setValue(++currentProgressValue);
  314.     // This is unfortunately needed right now, since JMenu
  315.     // has no way to know when an ancestor is removed from
  316.     // the hierarchy so that it can deselect itself.  We
  317.     // do this explicitly here so that menus aren't left
  318.     // hanging when you switch tabs -- better underlying 
  319.     // support will exist in future versions.
  320.     tabbedPane.addContainerListener(new ContainerAdapter() {
  321.         public void componentRemoved(ContainerEvent e) {
  322.         Component c = e.getChild();
  323.         if (c == menuPanel) 
  324.             menuBar.setSelected(null);
  325.         }
  326.  
  327.     });
  328.  
  329.     // ProgressBar
  330.     progressLabel.setText("Loading ProgressBar Example");
  331.     progressBarPanel = new ProgressPanel(this);
  332.     tabbedPane.addTab("ProgressBar", null, progressBarPanel);
  333.     progressBar.setValue(++currentProgressValue);
  334.  
  335.  
  336.     // ScrollPane
  337.     progressLabel.setText("Loading ScrollPane Example");
  338.     scrollPanePanel = new ScrollPanePanel();
  339.     tabbedPane.addTab("ScrollPane", littleTiger, scrollPanePanel);
  340.     progressBar.setValue(++currentProgressValue);
  341.  
  342.  
  343.     // Sliders
  344.     progressLabel.setText("Loading Slider Example");
  345.     sliderPanel = new SliderPanel(swing);
  346.     tabbedPane.addTab("Slider", null, sliderPanel);
  347.     progressBar.setValue(++currentProgressValue);
  348.  
  349.     // SplitPane
  350.     progressLabel.setText("Loading SplitPane Example");
  351.     splitPanePanel = new SplitPanePanel(this);
  352.     tabbedPane.addTab("SplitPane", null, splitPanePanel);
  353.     progressBar.setValue(++currentProgressValue);
  354.  
  355.  
  356.     // Table
  357.     progressLabel.setText("Loading Table Example");
  358.     tablePanel = new TablePanel(swing);
  359.     tabbedPane.addTab("TableView", null, tablePanel);
  360.     progressBar.setValue(++currentProgressValue);
  361.  
  362.     // Text
  363.     progressLabel.setText("Loading Text Example");
  364.     textPanel = new TextPanel(swing);
  365.     tabbedPane.addTab("Plain Text", null, textPanel);
  366.     progressBar.setValue(++currentProgressValue);
  367.  
  368.     // HTML Text
  369.     // PENDING(jeff) make this work when we are an applet
  370.     if(!isApplet()) {
  371.         progressLabel.setText("Loading HTML Text Example");
  372.         htmlPanel = new HtmlPanel(swing);
  373.         tabbedPane.addTab("HTML Text", null, htmlPanel);
  374.         progressBar.setValue(++currentProgressValue);
  375.     }
  376.  
  377.     // borderedPane
  378.     progressLabel.setText("Loading BorderedPane Example");
  379.     borderedPanePanel = new BorderedPanePanel(this);
  380.     tabbedPane.addTab("BorderedPane", null, borderedPanePanel);
  381.     progressBar.setValue(++currentProgressValue);
  382.  
  383.     // ToolTips
  384.     progressLabel.setText("Loading ToolTip Example");
  385.     toolTipPanel = new ToolTipPanel(swing);
  386.     tabbedPane.addTab("ToolTips", cow, toolTipPanel);
  387.     toolTipIndex = currentProgressValue;
  388.     progressBar.setValue(++currentProgressValue);
  389.  
  390.     // TreeView
  391.     progressLabel.setText("Loading TreeView Example");
  392.     treePanel = new TreePanel(this);
  393.     tabbedPane.addTab("TreeView", null, treePanel);
  394.     progressBar.setValue(++currentProgressValue);
  395.  
  396.     // Add Tab change listener
  397.     createTabListener();
  398.  
  399.     }
  400.  
  401.     class ToggleLogging extends AbstractAction {
  402.         public void actionPerformed(ActionEvent e) {
  403.            Timer.setLogTimers(!Timer.getLogTimers());
  404.         }
  405.  
  406.         public boolean isEnabled() {
  407.             return true;
  408.         }
  409.     }
  410.  
  411.   /** Image loading **/
  412.   void loadImages() {
  413.     blueDot   = loadImageIcon("images/dot.gif","A blue bullet icon - to draw attention to a menu item");
  414.     redDot   = loadImageIcon("images/redDot.gif","A red bullet icon - to draw attention to a menu item");
  415.     invisibleDot   = loadImageIcon("images/noDot.gif","An invisible bullet, used in visual spacing of menu items");
  416.     duke2 = loadImageIcon("images/duke2.gif","Duke with hands at sides");
  417.     dukeSnooze = loadImageIcon("images/dukeSnooze.gif","Sleeping Duke");
  418.     dukeWave   = loadImageIcon("images/dukeWave.gif","Duke waving");
  419.     dukeWaveRed = loadImageIcon("images/dukeWaveRed.gif","Duke waving with bright red nose");
  420.     dukeMagnify = loadImageIcon("images/dukeMagnify.gif","Duke with a magnifying glass");
  421.     cow         = loadImageIcon("images/cowSmall.gif","Black and white cow");
  422.     tiger       = loadImageIcon("images/BigTiger.gif","Fierce looking tiger");
  423.     littleTiger = loadImageIcon("images/SmallTiger.gif","Fierce looking tiger");
  424.     upButton    = loadImageIcon("images/buttonImage2.gif","Round button with gold border, green on the inside, and dark triangle pointing right.");
  425.     downButton  = loadImageIcon("images/buttonImage3.gif","Round button with gold border, green on the inside, and green triangle pointing right.");
  426.     disabledButton = loadImageIcon("images/buttonImage4.gif","Round button with gold border, green on the inside, and greyed out triangle pointing right.");
  427.   }
  428.  
  429.     private class AccessibilityEasterListener extends MouseAdapter {
  430.         StringTokenizer descriptionTokens;
  431.         String descriptionText;
  432.     JMenuItem menuItem;
  433.         public AccessibilityEasterListener(JMenuItem mi, String descs) {
  434.         super();
  435.         descriptionTokens = new StringTokenizer(descs, ",");
  436.         descriptionText = descs;
  437.         menuItem = mi;
  438.         }
  439.  
  440.         public void mouseEntered(MouseEvent e) {
  441.             if (!descriptionTokens.hasMoreTokens()) {
  442.             descriptionTokens = new StringTokenizer(descriptionText, ",");
  443.             }
  444.             menuItem.getAccessibleContext().setAccessibleDescription(descriptionTokens.nextToken());
  445.         }
  446.     }
  447.  
  448.     /*******************************************/
  449.     /************ create components ************/
  450.     /*******************************************/
  451.  
  452.     /**
  453.      * MenuBar
  454.      */
  455.     Dialog aboutBox;
  456.     JCheckBoxMenuItem cb;
  457.     JRadioButtonMenuItem rb;
  458.  
  459.     JMenuBar createMenuBar() {
  460.     // MenuBar
  461.     JMenuBar menuBar = new JMenuBar();
  462.     menuBar.getAccessibleContext().setAccessibleName("Swing menus");
  463.  
  464.     JMenuItem mi;
  465.  
  466.     // File Menu
  467.     JMenu file = (JMenu) menuBar.add(new JMenu("File"));
  468.         file.setMnemonic('F');
  469.     file.getAccessibleContext().setAccessibleDescription("The standard 'File' application menu");
  470.         mi = (JMenuItem) file.add(new JMenuItem("About"));
  471.         mi.setMnemonic('t');
  472.     mi.getAccessibleContext().setAccessibleDescription("Find out about the SwingSet application");
  473.     mi.addActionListener(new ActionListener() {
  474.         public void actionPerformed(ActionEvent e) {
  475.         // tabbedPane.setSelectedIndex(0);
  476.                 if(aboutBox == null) {
  477.                     aboutBox = new Dialog(SwingSet.sharedInstance().getFrame(), "About Swing!", false);
  478.                     JPanel groupPanel = new JPanel(new BorderLayout());
  479.             ImageIcon groupPicture = loadImageIcon("images/Copyright.gif",
  480.                       "SwingSet demo is Copyright (c) 1997 Sun Microsystems, Inc.  All Rights Reserved.");
  481.                     aboutBox.add(groupPanel, BorderLayout.CENTER);
  482.             JLabel groupLabel = (new JLabel(groupPicture));
  483.             groupLabel.getAccessibleContext().setAccessibleName("SwingSet demo Copyright");
  484.             groupLabel.getAccessibleContext().setAccessibleDescription("The JFC Swing Toolkit is a cooperative effort between JavaSoft and Netscape.  The SwingSet demo is Copyright 1997 Sun Microsystems, Inc.  All Rights Reserved.");
  485.                     groupPanel.add(groupLabel, BorderLayout.CENTER);
  486.                     JPanel buttonPanel = new JPanel(true);
  487.                     groupPanel.add(buttonPanel, BorderLayout.SOUTH);
  488.                     JButton button = (JButton) buttonPanel.add(new JButton("OK"));
  489.                     button.addActionListener(new ActionListener() {
  490.                         public void actionPerformed(ActionEvent e) {
  491.                             aboutBox.setVisible(false);
  492.                         }
  493.                     });
  494.                 }
  495.         aboutBox.pack();
  496.         aboutBox.show();
  497.         }
  498.     });
  499.  
  500.         file.add(new JSeparator());
  501.         mi = (JMenuItem) file.add(new JMenuItem("Open"));
  502.         mi.setMnemonic('O');
  503.     mi.setEnabled(false);
  504.     mi.getAccessibleContext().setAccessibleDescription("Placeholder sample menu item for opening a file");
  505.         mi = (JMenuItem) file.add(new JMenuItem("Save"));
  506.         mi.setMnemonic('S');
  507.     mi.setEnabled(false);
  508.     mi.getAccessibleContext().setAccessibleDescription("Placeholder sample menu item for saving a file");
  509.         mi = (JMenuItem) file.add(new JMenuItem("Save As..."));
  510.         mi.setMnemonic('A');
  511.     mi.setEnabled(false);
  512.     mi.getAccessibleContext().setAccessibleDescription("Placeholder sample menu item for saving a file with a new name");
  513.         file.add(new JSeparator());
  514.         mi = (JMenuItem) file.add(new JMenuItem("Exit"));
  515.         mi.setMnemonic('x');
  516.     mi.getAccessibleContext().setAccessibleDescription("Exit the SwingSet application");
  517.     mi.addActionListener(new ActionListener() {
  518.         public void actionPerformed(ActionEvent e) {
  519.         System.exit(0);
  520.         }
  521.     }
  522.     );
  523.  
  524.     // Options Menu
  525.     JMenu options = (JMenu) menuBar.add(new JMenu("Options"));
  526.         options.setMnemonic('p');
  527.     options.getAccessibleContext().setAccessibleDescription("Look and Feel options: select one of several different Look and Feels for the SwingSet application");
  528.  
  529.         // Look and Feel Radio control
  530.     ButtonGroup group = new ButtonGroup();
  531.     ToggleUIListener toggleUIListener = new ToggleUIListener();
  532.         windowsMenuItem = (JRadioButtonMenuItem) options.add(new JRadioButtonMenuItem("Windows Style Look and Feel"));
  533.     windowsMenuItem.setSelected(UIManager.getLookAndFeel().getName().equals("Windows"));
  534.     group.add(windowsMenuItem);
  535.     windowsMenuItem.addItemListener(toggleUIListener);
  536.     windowsMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, ActionEvent.ALT_MASK));
  537.  
  538.         motifMenuItem = (JRadioButtonMenuItem) options.add(new JRadioButtonMenuItem("Motif Look and Feel"));
  539.     motifMenuItem.setSelected(UIManager.getLookAndFeel().getName().equals("CDE/Motif"));
  540.     group.add(motifMenuItem);
  541.     motifMenuItem.addItemListener(toggleUIListener);
  542.     motifMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_2, ActionEvent.ALT_MASK));
  543.  
  544.         metalMenuItem = (JRadioButtonMenuItem) options.add(new JRadioButtonMenuItem("Metal Look and Feel"));
  545.     metalMenuItem.setSelected(UIManager.getLookAndFeel().getName().equals("Metal"));
  546.     metalMenuItem.setSelected(true);
  547.     group.add(metalMenuItem);
  548.     metalMenuItem.addItemListener(toggleUIListener);
  549.     metalMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_3, ActionEvent.ALT_MASK));
  550.  
  551.     // Not shipped yet with full Swing release
  552.         /*
  553.       macMenuItem = (JRadioButtonMenuItem) options.add(new JRadioButtonMenuItem("Macintosh Look and Feel"));
  554.       macMenuItem.setSelected(UIManager.getLookAndFeel().getName().equals("Macintosh"));
  555.       group.add(macMenuItem);
  556.       macMenuItem.addItemListener(toggleUIListener);
  557.       macMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_4, ActionEvent.ALT_MASK));
  558.     */
  559.  
  560.     // non-supported stuff
  561.     /*  
  562.         rb = (JRadioButtonMenuItem)
  563.             options.add(new JRadioButtonMenuItem("Metal Look and Feel (High Contrast Theme)"));
  564.         rb.setSelected(UIManager.getLookAndFeel().getName().equals("Metal HCT"));
  565.         group.add(rb);
  566.         rb.addItemListener(toggleUIListener);
  567.         rb.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_4, ActionEvent.ALT_MASK));
  568.         
  569.         rb = (JRadioButtonMenuItem)
  570.              options.add(new JRadioButtonMenuItem("Organic Look and Feel (Santa Fe)"));
  571.         rb.getAccessibleContext().setAccessibleDescription(
  572.              "The Organic Look and Feel with a brown/yellow color scheme");
  573.         rb.setSelected(UIManager.getLookAndFeel().getName().equals("Java"));
  574.         group.add(rb);
  575.         rb.addItemListener(toggleUIListener);
  576.         rb.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_5, ActionEvent.ALT_MASK));
  577.         
  578.         rb = (JRadioButtonMenuItem)
  579.             options.add(new JRadioButtonMenuItem("Organic Look and Feel (Vancouver)"));
  580.         rb.getAccessibleContext().setAccessibleDescription(
  581.             "The Organic Look and Feel with a neutral grey color scheme");
  582.         group.add(rb);
  583.         rb.addItemListener(toggleUIListener);
  584.         rb.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_6, ActionEvent.ALT_MASK));
  585.         
  586.         rb = (JRadioButtonMenuItem)
  587.             options.add(new JRadioButtonMenuItem("Organic Look and Feel (Dallas)"));
  588.         rb.getAccessibleContext().setAccessibleDescription(
  589.             "The Organic Look and Feel with a high contrast color scheme and large print");
  590.         group.add(rb);
  591.         rb.addItemListener(toggleUIListener);
  592.         rb.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_7, ActionEvent.ALT_MASK));
  593.     */
  594.  
  595.         // Tab Placement submenu
  596.         options.add(new JSeparator());
  597.  
  598.         tabPlacement = new TabPlacementChanger();
  599.     tabPlacement.getAccessibleContext().setAccessibleDescription(
  600.            "Sub-menu containing options for placement of the TabbedPane");
  601.         options.add(tabPlacement);
  602.  
  603.         // Tooltip checkbox
  604.         options.add(new JSeparator());
  605.  
  606.         cb = (JCheckBoxMenuItem) options.add(new JCheckBoxMenuItem("Show ToolTips"));
  607.     cb.setSelected(true);
  608.  
  609.     cb.addActionListener(new ActionListener() {
  610.         public void actionPerformed(ActionEvent e) {
  611.         JCheckBoxMenuItem cb = (JCheckBoxMenuItem)e.getSource();
  612.         if(cb.isSelected()) {
  613.                     ToolTipManager.sharedInstance().setEnabled(true);
  614.         } else {
  615.                     ToolTipManager.sharedInstance().setEnabled(false);
  616.         }
  617.         }
  618.     });
  619.  
  620.     ActionListener easterListener = new ActionListener() {
  621.         public void actionPerformed(ActionEvent e) {
  622.         tabbedPane.setSelectedIndex(toolTipIndex);
  623.         ((ToolTipPanel)toolTipPanel).itsEaster(true);
  624.         swing.invalidate();
  625.         swing.validate();
  626.         swing.repaint();
  627.         }
  628.     };
  629.  
  630.     // Contributors Menu
  631.     JMenu people = (JMenu) menuBar.add(new JMenu("Contributors"));
  632.         people.setMnemonic('A');
  633.     people.getAccessibleContext().setAccessibleDescription(
  634.             "Listing of all of the individual contributors to Swing");
  635.  
  636.         mi = (JMenuItem) people.add(new JMenuItem("Michael Albers", invisibleDot));
  637.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  638.  
  639.         mi = (JMenuItem) people.add(new JMenuItem("Mark Andrews", invisibleDot));
  640.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  641.  
  642.         mi = (JMenuItem) people.add(new JMenuItem("Tom Ball", blueDot));
  643.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  644.     mi.addActionListener(easterListener);
  645.  
  646.         mi = (JMenuItem) people.add(new JMenuItem("Alan Chung", invisibleDot));
  647.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  648.  
  649.         mi = (JMenuItem) people.add(new JMenuItem("Jeff Dinkins", blueDot));
  650.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  651.     mi.addActionListener(easterListener);
  652.  
  653.         mi = (JMenuItem) people.add(new JMenuItem("Amy Fowler", blueDot));
  654.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  655.     mi.addActionListener(easterListener);
  656.  
  657.         mi = (JMenuItem) people.add(new JMenuItem("Brian Gerhold", invisibleDot));
  658.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  659.  
  660.         mi = (JMenuItem) people.add(new JMenuItem("Makarand Gokhale", invisibleDot));
  661.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  662.  
  663.         mi = (JMenuItem) people.add(new JMenuItem("James Gosling", blueDot));
  664.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  665.     mi.addActionListener(easterListener);
  666.  
  667.         mi = (JMenuItem) people.add(new JMenuItem("David Karlton", invisibleDot));
  668.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  669.  
  670.         mi = (JMenuItem) people.add(new JMenuItem("Dave Kloba", redDot));
  671.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  672.     mi.addActionListener(new ActionListener() {
  673.         public void actionPerformed(ActionEvent e) {
  674.         tabbedPane.setSelectedIndex(toolTipIndex);
  675.         ((ToolTipPanel)toolTipPanel).itsEaster(false);
  676.         swing.invalidate();
  677.         swing.validate();
  678.         swing.repaint();
  679.         }
  680.     });
  681.  
  682.         mi = (JMenuItem) people.add(new JMenuItem("Peter Korn", invisibleDot));
  683.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  684.     mi.addMouseListener(new AccessibilityEasterListener(mi, "Wrote Accessibility API,Wrote outSPOKEN for Windows,Wrote GUIAccess for Windows,Contributed to outSPOKEN for Macintosh,Contributed to inLARGE for Macintosh"));
  685.  
  686.         mi = (JMenuItem) people.add(new JMenuItem("Rick Levenson", blueDot));
  687.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  688.     mi.addActionListener(easterListener);
  689.  
  690.         mi = (JMenuItem) people.add(new JMenuItem("Dana Miller", invisibleDot));
  691.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  692.  
  693.         mi = (JMenuItem) people.add(new JMenuItem("Philip Milne", blueDot));
  694.  
  695.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  696.     mi.addActionListener(easterListener);
  697.  
  698.         mi = (JMenuItem) people.add(new JMenuItem("Dave Moore", invisibleDot));
  699.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  700.  
  701.         mi = (JMenuItem) people.add(new JMenuItem("Hans Muller", blueDot));
  702.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  703.     mi.addActionListener(easterListener);
  704.  
  705.         mi = (JMenuItem) people.add(new JMenuItem("Jill Nakata", invisibleDot));
  706.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  707.  
  708.         mi = (JMenuItem) people.add(new JMenuItem("Tim Prinzing", blueDot));
  709.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  710.     mi.addActionListener(easterListener);
  711.  
  712.         mi = (JMenuItem) people.add(new JMenuItem("Chester Rose", invisibleDot));
  713.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  714.  
  715.         mi = (JMenuItem) people.add(new JMenuItem("Chris Ryan", invisibleDot));
  716.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  717.  
  718.         mi = (JMenuItem) people.add(new JMenuItem("Ray Ryan", invisibleDot));
  719.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  720.  
  721.         mi = (JMenuItem) people.add(new JMenuItem("Georges Saab", blueDot));
  722.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  723.     mi.addActionListener(easterListener);
  724.  
  725.         mi = (JMenuItem) people.add(new JMenuItem("Tom Santos", invisibleDot));
  726.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  727.  
  728.         mi = (JMenuItem) people.add(new JMenuItem("Jeff Shapiro", invisibleDot));
  729.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  730.  
  731.         mi = (JMenuItem) people.add(new JMenuItem("Joseph Scheuhammer", invisibleDot));
  732.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  733.  
  734.         mi = (JMenuItem) people.add(new JMenuItem("Rich Schiavi", blueDot));
  735.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  736.     mi.addActionListener(easterListener);
  737.  
  738.         mi = (JMenuItem) people.add(new JMenuItem("Nancy Schorr", invisibleDot));
  739.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  740.  
  741.         mi = (JMenuItem) people.add(new JMenuItem("Sara Swanson", invisibleDot));
  742.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  743.  
  744.         mi = (JMenuItem) people.add(new JMenuItem("Harry Vertelney", invisibleDot));
  745.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  746.  
  747.         mi = (JMenuItem) people.add(new JMenuItem("Scott Violet", invisibleDot));
  748.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  749.  
  750.         mi = (JMenuItem) people.add(new JMenuItem("Willie Walker", invisibleDot));
  751.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  752.     mi.addMouseListener(new AccessibilityEasterListener(mi, "Wrote Java Accessibility API,Wrote AccessX,Designed RAP prototol,Contributor to UltraSonix"));
  753.  
  754.         mi = (JMenuItem) people.add(new JMenuItem("Kathy Walrath", invisibleDot));
  755.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  756.  
  757.         mi = (JMenuItem) people.add(new JMenuItem("Arnaud Weber", blueDot));
  758.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  759.     mi.addActionListener(easterListener);
  760.  
  761.         mi = (JMenuItem) people.add(new JMenuItem("Steve Wilson", invisibleDot));
  762.     mi.setHorizontalTextPosition(JMenuItem.RIGHT);
  763.  
  764.     // Chooser Menu
  765.     JMenu choosers = (JMenu) menuBar.add(new JMenu("Choosers"));
  766.     choosers.setMnemonic('H');
  767.     choosers.getAccessibleContext().setAccessibleDescription("Invoke one of the Swing Choosers");
  768.     mi = (JMenuItem) choosers.add(new JMenuItem("Color Chooser"));
  769.     ActionListener startColorChooser = new ActionListener() {
  770.         public void actionPerformed(ActionEvent e) {
  771.         tabbedPane.setSelectedIndex(toolTipIndex);
  772.         Color color = JColorChooser.showDialog(SwingSet.this, "Color Chooser", getBackground());
  773.         toolTipPanel.setBackground(color); 
  774.         toolTipPanel.repaint();
  775.         
  776.         }
  777.     };
  778.     mi.addActionListener(startColorChooser);
  779.     
  780.     if(!isApplet()) {
  781.         mi = (JMenuItem) choosers.add(new JMenuItem("File Chooser"));
  782.         ActionListener startFileChooser = new ActionListener() {
  783.         public void actionPerformed(ActionEvent e) {
  784.             JFileChooser chooser = new JFileChooser();
  785.             int retval = chooser.showDialog(SwingSet.this);
  786.             if(retval == 0) {
  787.             File theFile = chooser.getSelectedFile();
  788.             if(theFile != null) {
  789.                 JOptionPane.showMessageDialog(SwingSet.this, "You chose this file: " +
  790.                               chooser.getSelectedFile().getName());
  791.                 return;
  792.             }
  793.             } 
  794.             JOptionPane.showMessageDialog(SwingSet.this, "No file chosen");
  795.         }
  796.         };
  797.         mi.addActionListener(startFileChooser);
  798.     }
  799.  
  800.     createOptionsMenu(menuBar);
  801.     return menuBar;
  802.     }
  803.  
  804.     /**
  805.      * Menus
  806.      */
  807.     JMenuBar menuBar;
  808.  
  809.     JPanel createMenus() {
  810.     JPanel p = createVerticalPanel(true);
  811.     p.setBorder(emptyBorder10);
  812.  
  813.     // ********************
  814.     // ***** MenuBar ******
  815.     // ********************
  816.     JLabel l = new JLabel("Menus:");
  817.     l.setAlignmentX(LEFT_ALIGNMENT);
  818.     l.setAlignmentY(TOP_ALIGNMENT);
  819.     l.setFont(boldFont);
  820.     p.add(l);
  821.     p.add(Box.createRigidArea(vpad10));
  822.     menuBar = new JMenuBar();
  823.     menuBar.getAccessibleContext().setAccessibleName(l.getText());
  824.     menuBar.setAlignmentX(LEFT_ALIGNMENT);
  825.     menuBar.setAlignmentY(TOP_ALIGNMENT);
  826.     p.add(menuBar);
  827.     p.add(Box.createRigidArea(vpad40));
  828.     l.setLabelFor(menuBar);    // make label Mnemonic go to menu bar
  829.     l.setDisplayedMnemonic('m');
  830.  
  831.     // File
  832.     JMenu file = (JMenu) menuBar.add(new JMenu("File"));
  833.     file.setMnemonic('i');
  834.     JMenuItem newItem =
  835.     file.add(new JMenuItem("New", loadImageIcon("images/new.gif","New")));
  836.     newItem.setHorizontalTextPosition(JButton.RIGHT);
  837.     newItem.setMnemonic('N');
  838.     JMenuItem open = (JMenuItem)
  839.     file.add(new JMenuItem("Open", loadImageIcon("images/open.gif","Open")));
  840.     open.setHorizontalTextPosition(JButton.RIGHT);
  841.     open.setMnemonic('O');
  842.     JMenuItem save = (JMenuItem)
  843.     file.add(new JMenuItem("Save", loadImageIcon("images/save.gif","Save")));
  844.     save.setHorizontalTextPosition(JButton.RIGHT);
  845.     save.setMnemonic('S');
  846.  
  847.     // Edit
  848.     JMenu edit = (JMenu) menuBar.add(new JMenu("Edit"));
  849.     edit.setMnemonic('E');
  850.     JMenuItem cut = (JMenuItem)
  851.     edit.add(new JMenuItem("Cut", loadImageIcon("images/cut.gif","Cut")));
  852.     cut.setHorizontalTextPosition(JButton.RIGHT);
  853.     cut.setMnemonic('t');
  854.     JMenuItem copy = (JMenuItem)
  855.     edit.add(new JMenuItem("Copy", loadImageIcon("images/copy.gif","Copy")));
  856.     copy.setHorizontalTextPosition(JButton.RIGHT);
  857.     copy.setMnemonic('C');
  858.     JMenuItem paste = (JMenuItem)
  859.     edit.add(new JMenuItem("Paste", loadImageIcon("images/paste.gif","Paste")));
  860.     paste.setHorizontalTextPosition(JButton.RIGHT);
  861.     paste.setMnemonic('P');
  862.  
  863.     // Letters
  864.     JMenu letters = (JMenu) menuBar.add(new JMenu("Letters "));
  865.     letters.setMnemonic('t');
  866.  
  867.     JMenu letterMenu;
  868.     JMenu subMenu;
  869.         JMenu tmpMenu;
  870.  
  871.     // C
  872.         letterMenu = (JMenu) letters.add((tmpMenu = new JMenu("A")));
  873.         tmpMenu.setMnemonic('A');
  874.         subMenu = (JMenu) letterMenu.add(new JMenu("A is for Airplane"));
  875.           subMenu.add(new JMenuItem("Cessna 152"));
  876.           subMenu.add(new JMenuItem("Boeing 747"));
  877.           subMenu.add(new JMenuItem("Piper Cherokee"));
  878.  
  879.         subMenu = (JMenu) letterMenu.add(new JMenu("A is for Alicia Silverstone"));
  880.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Clueless"));
  881.       cb.setSelected(true);
  882.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Batman"));
  883.  
  884.         subMenu = (JMenu) letterMenu.add(new JMenu("A is for Apple"));
  885.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Fuji"));
  886.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Granny Smith"));
  887.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Macintosh"));
  888.       cb.setSelected(true);
  889.  
  890.     // B
  891.         letterMenu = (JMenu) letters.add((tmpMenu = new JMenu("B")));
  892.         tmpMenu.setMnemonic('B');
  893.         subMenu = (JMenu) letterMenu.add(new JMenu("B is for Swing Babies!"));
  894.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Ewan"));
  895.       cb.setSelected(true);
  896.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Matthew"));
  897.       cb.setSelected(true);
  898.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Montana"));
  899.       cb.setSelected(true);
  900.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Nathan"));
  901.       cb.setSelected(true);
  902.  
  903.         subMenu = (JMenu) letterMenu.add(new JMenu("B is for Band"));
  904.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Alice In Chains"));
  905.       cb.setSelected(true);
  906.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("King Crimson"));
  907.       cb.setSelected(true);
  908.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Meat Puppets"));
  909.       cb.setSelected(true);
  910.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Rush"));
  911.       cb.setSelected(true);
  912.  
  913.         subMenu = (JMenu) letterMenu.add(new JMenu("B is for Baywatch"));
  914.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Pam Anderson"));
  915.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("David Hasslehoff"));
  916.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Yasmine Bleeth"));
  917.       cb.setSelected(true);
  918.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Carmine Electra"));
  919.  
  920.     // C
  921.         letterMenu = (JMenu) letters.add((tmpMenu = new JMenu("C")));
  922.         tmpMenu.setMnemonic('c');
  923.         subMenu = (JMenu) letterMenu.add(new JMenu("C is for Cookie"));
  924.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Chocolate Chip"));
  925.       cb.setSelected(true);
  926.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Fortune"));
  927.       cb.setSelected(true);
  928.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Oatmeal"));
  929.       cb.setSelected(true);
  930.  
  931.         subMenu = (JMenu) letterMenu.add(new JMenu("C is for Cool"));
  932.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("James Dean"));
  933.       cb.setSelected(true);
  934.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("The Fonz"));
  935.       cb.setSelected(true);
  936.  
  937.         subMenu = (JMenu) letterMenu.add(new JMenu("C is for Cats"));
  938.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Ridley"));
  939.       cb.setSelected(true);
  940.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Quigley"));
  941.       cb.setSelected(true);
  942.           cb = (JCheckBoxMenuItem) subMenu.add(new JCheckBoxMenuItem("Kizmet "));
  943.       cb.setSelected(true);
  944.  
  945.  
  946.     // Colors
  947.     JMenu colors = (JMenu) menuBar.add(new JMenu("Colors"));
  948.     colors.setMnemonic('C');
  949.     colors.setHorizontalTextPosition(JButton.RIGHT);
  950.     colors.setIcon(new ColoredSquare(Color.orange));
  951.     menuBar.validate();
  952.  
  953.         JMenuItem red = colors.add(new JMenuItem("Red"));
  954.     red.setHorizontalTextPosition(JButton.RIGHT);
  955.     red.setIcon(new ColoredSquare(Color.red));
  956.  
  957.         JMenuItem blue = colors.add(new JMenuItem("Blue"));
  958.     blue.setHorizontalTextPosition(JButton.RIGHT);
  959.     blue.setIcon(new ColoredSquare(Color.blue));
  960.  
  961.         JMenuItem green = colors.add(new JMenuItem("Green"));
  962.     green.setHorizontalTextPosition(JButton.RIGHT);
  963.     green.setIcon(new ColoredSquare(Color.green));
  964.  
  965.         JMenuItem yellow = colors.add(new JMenuItem("Yellow"));
  966.     yellow.setHorizontalTextPosition(JButton.RIGHT);
  967.     yellow.setIcon(new ColoredSquare(Color.yellow));
  968.  
  969.     // Numbers
  970.     JMenu numbers = (JMenu) menuBar.add(new JMenu("Numbers"));
  971.     numbers.setMnemonic('u');
  972.         numbers.add(new JMenuItem("1234"));
  973.         numbers.add(new JMenuItem("1005"));
  974.         numbers.add(new JMenuItem("2222"));
  975.  
  976.     JMenu drinks = (JMenu) menuBar.add(new JMenu("Drinks"));
  977.     drinks.setMnemonic('D');
  978.         drinks.add(new JMenuItem("Thai Iced Tea"));
  979.         drinks.add(new JMenuItem("Root Beer"));
  980.         drinks.add(new JMenuItem("Green Tea"));
  981.         drinks.add(new JMenuItem("Apple Juice"));
  982.     drinks.addSeparator();
  983.     ImageIcon softdrink = 
  984.              loadImageIcon("images/ImageClub/food/softdrink.gif","soft drink");
  985.         drinks.add(new JMenuItem("Softdrink", softdrink));
  986.  
  987.     JMenu music = (JMenu) menuBar.add(new JMenu("Music"));
  988.     music.setMnemonic('s');
  989.         music.add(new JMenuItem("Rock"));
  990.         music.add(new JMenuItem("Country"));
  991.         music.add(new JMenuItem("Classical"));
  992.         music.add(new JMenuItem("Jazz"));
  993.  
  994.     JMenu food = (JMenu) menuBar.add(new JMenu("Junk Food"));
  995.     food.setMnemonic('J');
  996.     ImageIcon burger = loadImageIcon("images/ImageClub/food/burger.gif","burger");
  997.     ImageIcon fries  = loadImageIcon("images/ImageClub/food/fries.gif","fries");
  998.     ImageIcon hotdog = loadImageIcon("images/ImageClub/food/hotdog.gif","hot dog");
  999.     ImageIcon pizza  = loadImageIcon("images/ImageClub/food/pizza.gif","pizza");
  1000.  
  1001.         addMenuItem(food, "Burger", burger);
  1002.     addMenuItem(food, "Fries", fries);
  1003.     addMenuItem(food, "Hotdog", hotdog);
  1004.     addMenuItem(food, "Pizza", pizza);
  1005.  
  1006.     // ********************
  1007.     // ****** ToolBar *****
  1008.     // ********************
  1009.     l = new JLabel("ToolBar:");
  1010.     l.setFont(boldFont);
  1011.     l.setAlignmentX(LEFT_ALIGNMENT);
  1012.     l.setAlignmentY(TOP_ALIGNMENT);
  1013.     p.add(l);
  1014.     p.add(Box.createRigidArea(vpad10));
  1015.  
  1016.     JPanel p1 = (JPanel)p.add(new JPanel());
  1017.     p1.setAlignmentX(LEFT_ALIGNMENT);
  1018.     p1.setAlignmentY(TOP_ALIGNMENT);
  1019.  
  1020.     p1.setLayout(new BorderLayout());
  1021.     JToolBar toolBar = new JToolBar();
  1022.     toolBar.setFloatable(false);
  1023.     toolBar.getAccessibleContext().setAccessibleName(l.getText());
  1024.     addTool(toolBar, "new");
  1025.     addTool(toolBar, "open");
  1026.     addTool(toolBar, "save");
  1027.     toolBar.addSeparator();
  1028.     addTool(toolBar, "cut");
  1029.     addTool(toolBar, "copy");
  1030.     addTool(toolBar, "paste");
  1031.  
  1032.     toolBar.putClientProperty( "JToolBar.isRollover", Boolean.FALSE );
  1033.     l.setLabelFor(toolBar);  // make label Mnemonic go to toolbar
  1034.     l.setDisplayedMnemonic('B');
  1035.  
  1036.     p1.add(toolBar, BorderLayout.NORTH);
  1037.  
  1038.     JPanel textWrapper = new JPanel(new BorderLayout());
  1039.     textWrapper.setAlignmentX(LEFT_ALIGNMENT);
  1040.      textWrapper.setBorder(swing.loweredBorder);
  1041.     
  1042.     p1.add(textWrapper, BorderLayout.CENTER);
  1043.  
  1044.     String text = SwingSet.contentsOfFile("ToolBar.txt");
  1045.     JTextArea textArea = new JTextArea(text);
  1046.     textArea.getAccessibleContext().setAccessibleName("ToolBar information");
  1047.     JScrollPane scroller = new JScrollPane() {
  1048.         public Dimension getPreferredSize() {
  1049.         return new Dimension(10,10);
  1050.         }
  1051.         public float getAlignmentX() {
  1052.         return LEFT_ALIGNMENT;
  1053.         }
  1054.     };
  1055.     scroller.getViewport().add(textArea);
  1056.     textArea.setFont(new Font("Dialog", Font.PLAIN, 12));
  1057.     textWrapper.add(scroller, BorderLayout.CENTER);
  1058.     
  1059.     textArea.setEditable(false);
  1060.     return p;
  1061.     }
  1062.  
  1063.     void createOptionsMenu(JMenuBar menuBar) {
  1064.     JMenu optionMenu = (JMenu)menuBar.add(new JMenu("Dialogs"));
  1065.         optionMenu.setMnemonic('D');
  1066.     JMenuItem item;
  1067.     item = new JMenuItem("Message Dialog");
  1068.     item.addActionListener(new ActionListener() {
  1069.         public void actionPerformed(ActionEvent e) {
  1070.         JOptionPane.showMessageDialog(SwingSet.this, "Plain message");
  1071.         }
  1072.     });
  1073.     optionMenu.add(item);
  1074.  
  1075.     item = new JMenuItem("Warning Dialog");
  1076.     item.addActionListener(new ActionListener() {
  1077.         public void actionPerformed(ActionEvent e) {
  1078.         JOptionPane.showMessageDialog(SwingSet.this, "Example Warning",
  1079.                     "Warning", JOptionPane.WARNING_MESSAGE);
  1080.         }
  1081.     });
  1082.     optionMenu.add(item);
  1083.  
  1084.     item = new JMenuItem("Confirmation Dialog");
  1085.     item.addActionListener(new ActionListener() {
  1086.         public void actionPerformed(ActionEvent e) {
  1087.         int        result;
  1088.         result = JOptionPane.showConfirmDialog(SwingSet.this, "Is SWING cool?");
  1089.         if(result == JOptionPane.YES_OPTION)
  1090.             JOptionPane.showMessageDialog(SwingSet.this, "All right!");
  1091.         else if(result == JOptionPane.NO_OPTION)
  1092.             JOptionPane.showMessageDialog(SwingSet.this, "That is too bad, please send us email describing what you don't like and how we can change it.");
  1093.         }
  1094.     });
  1095.     optionMenu.add(item);
  1096.  
  1097.     item = new JMenuItem("Input Dialog");
  1098.     item.addActionListener(new ActionListener() {
  1099.         public void actionPerformed(ActionEvent e) {
  1100.         String          result;
  1101.  
  1102.         result = JOptionPane.showInputDialog(SwingSet.this, "Please enter your name:");
  1103.         if(result != null) {
  1104.             Object[] message = new Object[2];
  1105.             message[0] = "Thank you for using SWING ";
  1106.             message[1] = result;
  1107.             JOptionPane.showMessageDialog(SwingSet.this, message);
  1108.         }
  1109.         }
  1110.     });
  1111.     optionMenu.add(item);
  1112.  
  1113.     item = new JMenuItem("Component Dialog");
  1114.     item.addActionListener(new ActionListener() {
  1115.         public void actionPerformed(ActionEvent e) {
  1116.         Object[]      message = new Object[4];
  1117.                 JComboBox cb = new JComboBox();
  1118.                 cb.addItem("One");
  1119.                 cb.addItem("Two");
  1120.                 cb.addItem("Three");
  1121.         message[0] = "JOptionPane can contain any number of components, and any number options.";
  1122.         message[1] = new JButton("a button");
  1123.         message[2] = new JTextField("a text field");
  1124.                 message[3] = cb;
  1125.                 
  1126.  
  1127.         String[]      options = { "Option 1", "Option 2", "Option 3",
  1128.                       "Option 4" };
  1129.         JOptionPane.showOptionDialog(SwingSet.this, message, "Example", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, options, options[1]);
  1130.         }
  1131.     });
  1132.     optionMenu.add(item);
  1133.     }
  1134.     
  1135.  
  1136.     void addMenuItem(JMenu menu, String text, Icon g) {
  1137.     JMenuItem mi = menu.add(new JMenuItem(text, g));
  1138.     mi.setHorizontalTextPosition(JButton.CENTER);
  1139.     mi.setHorizontalAlignment(JButton.LEFT);
  1140.     mi.setVerticalTextPosition(JButton.BOTTOM);
  1141.     }
  1142.  
  1143.     public void addTool(JToolBar toolBar, String name) {
  1144.     JButton b = 
  1145.            (JButton) toolBar.add(
  1146.                new JButton(loadImageIcon("images/" + name + ".gif",name)));
  1147.     b.setToolTipText(name);
  1148.     b.setMargin(new Insets(0,0,0,0));
  1149.     b.getAccessibleContext().setAccessibleName(name);
  1150.     }
  1151.  
  1152.     /**
  1153.      * Text
  1154.      */
  1155.     JPanel createText() {
  1156.     return new JPanel();
  1157.     }
  1158.  
  1159.     /**
  1160.      * Tab Listener
  1161.      */
  1162.     void createTabListener() {
  1163.     // add listener to know when we've been shown
  1164.         ChangeListener changeListener = new ChangeListener() {
  1165.             public void stateChanged(ChangeEvent e) {
  1166.                 JTabbedPane tab = (JTabbedPane) e.getSource();
  1167.                 int index = tab.getSelectedIndex();
  1168.                 Component currentPage = tab.getComponentAt(index);
  1169.         RepaintManager repaintManager = 
  1170.                     RepaintManager.currentManager(instance);
  1171.  
  1172.         if(!repaintManager.isDoubleBufferingEnabled()) {
  1173.           repaintManager.setDoubleBufferingEnabled(true);
  1174.         }
  1175.  
  1176.         if(previousPage == debugGraphicsPanel) {
  1177.             ((DebugGraphicsPanel)debugGraphicsPanel).resetAll();
  1178.         }
  1179.  
  1180.                 if(currentPage == buttonPanel) {
  1181.             currentControls = buttons;
  1182.         } else if(currentPage == radioButtonPanel) {
  1183.             currentControls = radioButtons;
  1184.         } else if(currentPage == toggleButtonPanel) {
  1185.             currentControls = toggleButtons;
  1186.         } else if(currentPage == checkboxPanel) {
  1187.             currentControls = checkboxes;
  1188.         } else if(currentPage == listBoxPanel) {
  1189.             ((ListPanel)listBoxPanel).resetAll();
  1190.         } else if(currentPage == debugGraphicsPanel) {
  1191.             repaintManager.setDoubleBufferingEnabled(false);
  1192.             invalidate();
  1193.             validate();
  1194.         } else if(currentPage == labelPanel) {
  1195.             currentControls = labels;
  1196.                 }
  1197.                 previousPage = currentPage;
  1198.             }
  1199.         };
  1200.         tabbedPane.addChangeListener(changeListener);
  1201.     }
  1202.  
  1203.  
  1204.  
  1205.     /**
  1206.      *
  1207.      */
  1208.     JPanel createControllButtons() {
  1209.     JPanel p = new JPanel();
  1210.     p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
  1211.     p.setBorder(emptyBorder5);
  1212.  
  1213.     return p;
  1214.     }
  1215.  
  1216.     /**
  1217.      * create Logo
  1218.      */
  1219.     JPanel createLogo() {
  1220.     JPanel p = new JPanel();
  1221.     p.setLayout(new BorderLayout());
  1222.     ImageIcon logo = loadImageIcon("images/AboutSwing.gif","Swing!");
  1223.     JLabel logoLabel = new JLabel(logo);
  1224.     logoLabel.getAccessibleContext().setAccessibleName("Swing!");
  1225.     p.add(logoLabel, BorderLayout.CENTER);
  1226.     p.setBorder(new MatteBorder(6,6,6,6, SwingSet.sharedInstance().loadImageIcon("images/AboutBorder.gif","About Box Border")));
  1227.  
  1228.     return p;
  1229.     }
  1230.  
  1231.  
  1232.     public static void main(String[] args) {
  1233.         if (args.length == 1) {
  1234.         javaDocPath = args[0];
  1235.         }
  1236.  
  1237.         String vers = System.getProperty("java.version");
  1238.         if (vers.compareTo("1.1.2") < 0) {
  1239.             System.out.println("!!!WARNING: Swing must be run with a " +
  1240.                                "1.1.2 or higher version VM!!!");
  1241.         }
  1242.  
  1243.     // Force SwingSet to come up in the Cross Platform L&F
  1244.     try {
  1245.         UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
  1246.         // If you want the System L&F instead, comment out the above line and
  1247.         // uncomment the following:
  1248.         // UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  1249.     } catch (Exception exc) {
  1250.         System.out.println("Error loading L&F: " + exc);
  1251.     }
  1252.  
  1253.     WindowListener l = new WindowAdapter() {
  1254.         public void windowClosing(WindowEvent e) {System.exit(0);}
  1255.     };
  1256.  
  1257.     frame = new JFrame("SwingSet");
  1258.     frame.addWindowListener(l);
  1259.     frame.getAccessibleContext().setAccessibleDescription("A sample application to demonstrate the Swing UI components");
  1260.  
  1261.     JOptionPane.setRootFrame(frame);
  1262.  
  1263.     JPanel progressPanel = new JPanel() {
  1264.         public Insets getInsets() {
  1265.         return new Insets(40,30,20,30);
  1266.         }
  1267.     };
  1268.     progressPanel.setLayout(new BoxLayout(progressPanel, BoxLayout.Y_AXIS));
  1269.     frame.getContentPane().add(progressPanel, BorderLayout.CENTER);
  1270.  
  1271.     Dimension d = new Dimension(400, 20);
  1272.     SwingSet.progressLabel = new JLabel("Loading, please wait...");
  1273.     SwingSet.progressLabel.setAlignmentX(CENTER_ALIGNMENT);
  1274.     SwingSet.progressLabel.setMaximumSize(d);
  1275.     SwingSet.progressLabel.setPreferredSize(d);
  1276.     progressPanel.add(progressLabel);
  1277.     progressPanel.add(Box.createRigidArea(new Dimension(1,20)));
  1278.  
  1279.     SwingSet.progressBar = new JProgressBar();
  1280.     SwingSet.progressLabel.setLabelFor(progressBar);
  1281.     SwingSet.progressBar.setAlignmentX(CENTER_ALIGNMENT);
  1282.     SwingSet.progressBar.setMinimum(0);
  1283.     SwingSet.progressBar.setMaximum(SwingSet.totalPanels);
  1284.     SwingSet.progressBar.setValue(0);
  1285.     SwingSet.progressBar.getAccessibleContext().setAccessibleName("SwingSet loading progress");
  1286.     progressPanel.add(SwingSet.progressBar);
  1287.  
  1288.     // show the frame
  1289.     frame.setSize(INITIAL_WIDTH, INITIAL_HEIGHT);
  1290.     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  1291.     frame.setLocation(screenSize.width/2 - INITIAL_WIDTH/2,
  1292.               screenSize.height/2 - INITIAL_HEIGHT/2);
  1293.     frame.show();
  1294.  
  1295.         frame.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
  1296.  
  1297.     SwingSet sw = new SwingSet();
  1298.     frame.getContentPane().removeAll();
  1299.     frame.getContentPane().setLayout(new BorderLayout());
  1300.     frame.getContentPane().add(sw, BorderLayout.CENTER);
  1301.     frame.setLocation(screenSize.width/2 - WIDTH/2,
  1302.               screenSize.height/2 - HEIGHT/2);
  1303.  
  1304.     frame.setSize(WIDTH, HEIGHT);
  1305.     frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  1306.  
  1307.     frame.validate();
  1308.     frame.repaint();
  1309.         sw.requestDefaultFocus();
  1310.     }
  1311.  
  1312.  
  1313.     // Position
  1314.     void setNWposition(AbstractButton b) {b.setHorizontalTextPosition(AbstractButton.LEFT);   b.setVerticalTextPosition(AbstractButton.TOP);}
  1315.     void setNposition(AbstractButton b)  {b.setHorizontalTextPosition(AbstractButton.CENTER); b.setVerticalTextPosition(AbstractButton.TOP);}
  1316.     void setNEposition(AbstractButton b) {b.setHorizontalTextPosition(AbstractButton.RIGHT);  b.setVerticalTextPosition(AbstractButton.TOP);}
  1317.     void setWposition(AbstractButton b)  {b.setHorizontalTextPosition(AbstractButton.LEFT);   b.setVerticalTextPosition(AbstractButton.CENTER);}
  1318.     void setCposition(AbstractButton b)  {b.setHorizontalTextPosition(AbstractButton.CENTER); b.setVerticalTextPosition(AbstractButton.CENTER);}
  1319.     void setEposition(AbstractButton b)  {b.setHorizontalTextPosition(AbstractButton.RIGHT);  b.setVerticalTextPosition(AbstractButton.CENTER);}
  1320.     void setSWposition(AbstractButton b) {b.setHorizontalTextPosition(AbstractButton.LEFT);   b.setVerticalTextPosition(AbstractButton.BOTTOM);}
  1321.     void setSposition(AbstractButton b)  {b.setHorizontalTextPosition(AbstractButton.CENTER); b.setVerticalTextPosition(AbstractButton.BOTTOM);}
  1322.     void setSEposition(AbstractButton b) {b.setHorizontalTextPosition(AbstractButton.RIGHT);  b.setVerticalTextPosition(AbstractButton.BOTTOM);}
  1323.  
  1324.     void setNWposition(JLabel b) {b.setHorizontalTextPosition(JLabel.LEFT);   b.setVerticalTextPosition(JLabel.TOP);}
  1325.     void setNposition(JLabel b)  {b.setHorizontalTextPosition(JLabel.CENTER); b.setVerticalTextPosition(JLabel.TOP);}
  1326.     void setNEposition(JLabel b) {b.setHorizontalTextPosition(JLabel.RIGHT);  b.setVerticalTextPosition(JLabel.TOP);}
  1327.     void setWposition(JLabel b)  {b.setHorizontalTextPosition(JLabel.LEFT);   b.setVerticalTextPosition(JLabel.CENTER);}
  1328.     void setCposition(JLabel b)  {b.setHorizontalTextPosition(JLabel.CENTER); b.setVerticalTextPosition(JLabel.CENTER);}
  1329.     void setEposition(JLabel b)  {b.setHorizontalTextPosition(JLabel.RIGHT);  b.setVerticalTextPosition(JLabel.CENTER);}
  1330.     void setSWposition(JLabel b) {b.setHorizontalTextPosition(JLabel.LEFT);   b.setVerticalTextPosition(JLabel.BOTTOM);}
  1331.     void setSposition(JLabel b)  {b.setHorizontalTextPosition(JLabel.CENTER); b.setVerticalTextPosition(JLabel.BOTTOM);}
  1332.     void setSEposition(JLabel b) {b.setHorizontalTextPosition(JLabel.RIGHT);  b.setVerticalTextPosition(JLabel.BOTTOM);}
  1333.  
  1334.     // Alignment
  1335.     void setNWalignment(AbstractButton b) {b.setHorizontalAlignment(AbstractButton.LEFT);   b.setVerticalAlignment(AbstractButton.TOP);}
  1336.     void setNalignment(AbstractButton b)  {b.setHorizontalAlignment(AbstractButton.CENTER); b.setVerticalAlignment(AbstractButton.TOP);}
  1337.     void setNEalignment(AbstractButton b) {b.setHorizontalAlignment(AbstractButton.RIGHT);  b.setVerticalAlignment(AbstractButton.TOP);}
  1338.     void setWalignment(AbstractButton b)  {b.setHorizontalAlignment(AbstractButton.LEFT);   b.setVerticalAlignment(AbstractButton.CENTER);}
  1339.     void setCalignment(AbstractButton b)  {b.setHorizontalAlignment(AbstractButton.CENTER); b.setVerticalAlignment(AbstractButton.CENTER);}
  1340.     void setEalignment(AbstractButton b)  {b.setHorizontalAlignment(AbstractButton.RIGHT);  b.setVerticalAlignment(AbstractButton.CENTER);}
  1341.     void setSWalignment(AbstractButton b) {b.setHorizontalAlignment(AbstractButton.LEFT);   b.setVerticalAlignment(AbstractButton.BOTTOM);}
  1342.     void setSalignment(AbstractButton b)  {b.setHorizontalAlignment(AbstractButton.CENTER); b.setVerticalAlignment(AbstractButton.BOTTOM);}
  1343.     void setSEalignment(AbstractButton b) {b.setHorizontalAlignment(AbstractButton.RIGHT);  b.setVerticalAlignment(AbstractButton.BOTTOM);}
  1344.  
  1345.     void setNWalignment(JLabel b) {b.setHorizontalAlignment(JLabel.LEFT);   b.setVerticalAlignment(JLabel.TOP);}
  1346.     void setNalignment(JLabel b)  {b.setHorizontalAlignment(JLabel.CENTER); b.setVerticalAlignment(JLabel.TOP);}
  1347.     void setNEalignment(JLabel b) {b.setHorizontalAlignment(JLabel.RIGHT);  b.setVerticalAlignment(JLabel.TOP);}
  1348.     void setWalignment(JLabel b)  {b.setHorizontalAlignment(JLabel.LEFT);   b.setVerticalAlignment(JLabel.CENTER);}
  1349.     void setCalignment(JLabel b)  {b.setHorizontalAlignment(JLabel.CENTER); b.setVerticalAlignment(JLabel.CENTER);}
  1350.     void setEalignment(JLabel b)  {b.setHorizontalAlignment(JLabel.RIGHT);  b.setVerticalAlignment(JLabel.CENTER);}
  1351.     void setSWalignment(JLabel b) {b.setHorizontalAlignment(JLabel.LEFT);   b.setVerticalAlignment(JLabel.BOTTOM);}
  1352.     void setSalignment(JLabel b)  {b.setHorizontalAlignment(JLabel.CENTER); b.setVerticalAlignment(JLabel.BOTTOM);}
  1353.     void setSEalignment(JLabel b) {b.setHorizontalAlignment(JLabel.RIGHT);  b.setVerticalAlignment(JLabel.BOTTOM);}
  1354.  
  1355.     /**
  1356.      * Switch the between the Windows, Motif, Mac, and the Metal Look and Feel
  1357.      */
  1358.     class ToggleUIListener implements ItemListener {
  1359.     public void itemStateChanged(ItemEvent e) {
  1360.         Component root = SwingSet.sharedInstance().getRootComponent();
  1361.         root.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
  1362.         JRadioButtonMenuItem rb = (JRadioButtonMenuItem) e.getSource();
  1363.             try {
  1364.            if(rb.isSelected() && rb.getText().equals("Windows Style Look and Feel")) {
  1365.            currentUI = "Windows";
  1366.                UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
  1367.                    tabPlacement.setEnabled(true);
  1368.                SwingUtilities.updateComponentTreeUI(getRootComponent());
  1369.            } else if(rb.isSelected() && rb.getText().equals("Macintosh Look and Feel")) {
  1370.            currentUI = "Macintosh";
  1371.                UIManager.setLookAndFeel("com.sun.java.swing.plaf.mac.MacLookAndFeel");
  1372.                    tabPlacement.setEnabled(false);
  1373.                SwingUtilities.updateComponentTreeUI(getRootComponent());
  1374.            } else if(rb.isSelected() && rb.getText().equals("Motif Look and Feel")) {
  1375.            currentUI = "Motif";
  1376.                UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
  1377.                    tabPlacement.setEnabled(true);
  1378.                SwingUtilities.updateComponentTreeUI(getRootComponent());
  1379.            } else if(rb.isSelected() && rb.getText().equals("Metal Look and Feel")) {
  1380.            currentUI = "Metal";
  1381.                    // com.sun.java.swing.plaf.metal.MetalLookAndFeel.setCurrentTheme(
  1382.            //      new com.sun.java.swing.plaf.metal.DefaultMetalTheme());
  1383.                UIManager.setLookAndFeel("com.sun.java.swing.plaf.metal.MetalLookAndFeel");
  1384.                    tabPlacement.setEnabled(true);
  1385.                SwingUtilities.updateComponentTreeUI(getRootComponent());
  1386.            } 
  1387.            /* non-supported stuff
  1388.            else if(rb.isSelected() && rb.getText().equals(
  1389.                   "Metal Look and Feel (High Contrast Theme)")) {
  1390.                com.sun.java.swing.plaf.metal.MetalLookAndFeel.setCurrentTheme(
  1391.               new com.sun.java.swing.plaf.metal.ContrastMetalTheme());
  1392.                UIManager.setLookAndFeel("com.sun.java.swing.plaf.metal.MetalLookAndFeel");
  1393.                SwingUtilities.updateComponentTreeUI(getRootComponent());
  1394.            } else if(rb.isSelected() && rb.getText().equals("Organic Look and Feel (Santa Fe)")) {
  1395.                com.sun.java.swing.plaf.organic.OrganicLookAndFeel.setCurrentTheme(
  1396.               new com.sun.java.swing.plaf.organic.OrganicDefaultTheme());
  1397.                UIManager.setLookAndFeel("com.sun.java.swing.plaf.organic.OrganicLookAndFeel");
  1398.                    tabPlacement.setEnabled(true);
  1399.                SwingUtilities.updateComponentTreeUI(getRootComponent());
  1400.            } else if(rb.isSelected() && rb.getText().equals("Organic Look and Feel (Vancouver)")) {
  1401.                com.sun.java.swing.plaf.organic.OrganicLookAndFeel.setCurrentTheme(
  1402.               new com.sun.java.swing.plaf.organic.OrganicGrayTheme());
  1403.                UIManager.setLookAndFeel("com.sun.java.swing.plaf.organic.OrganicLookAndFeel");
  1404.                    tabPlacement.setEnabled(true);
  1405.                SwingUtilities.updateComponentTreeUI(getRootComponent());
  1406.            } else if(rb.isSelected() && rb.getText().equals("Organic Look and Feel (Dallas)")) {
  1407.                com.sun.java.swing.plaf.organic.OrganicLookAndFeel.setCurrentTheme(
  1408.               new com.sun.java.swing.plaf.organic.OrganicBigTheme());
  1409.                UIManager.setLookAndFeel("com.sun.java.swing.plaf.organic.OrganicLookAndFeel");
  1410.                    tabPlacement.setEnabled(true);
  1411.                SwingUtilities.updateComponentTreeUI(getRootComponent());
  1412.            }
  1413.                */
  1414.             } catch (UnsupportedLookAndFeelException exc) {
  1415.         // Error - unsupported L&F
  1416.         rb.setEnabled(false);
  1417.                 System.err.println("Unsupported LookAndFeel: " + rb.getText());
  1418.         
  1419.         // Set L&F to Metal
  1420.         try {
  1421.             currentUI = "Metal";
  1422.             metalMenuItem.setSelected(true);
  1423.             UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
  1424.             tabPlacement.setEnabled(true);
  1425.             SwingUtilities.updateComponentTreeUI(getRootComponent());
  1426.         } catch (Exception exc2) {
  1427.             System.err.println("Could not load LookAndFeel: " + exc2);
  1428.         }
  1429.             } catch (Exception exc) {
  1430.                 rb.setEnabled(false);
  1431.                 System.err.println("Could not load LookAndFeel: " + rb.getText());
  1432.             }
  1433.  
  1434.         root.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  1435.     }
  1436.  
  1437.     }
  1438.             
  1439.  
  1440.    class TabPlacementChanger extends JMenu implements ItemListener {
  1441.        JRadioButtonMenuItem topRb, leftRb, rightRb, bottomRb;
  1442.  
  1443.        public TabPlacementChanger() {
  1444.            super("Tab Placement");
  1445.  
  1446.            ButtonGroup tabGroup = new ButtonGroup();
  1447.  
  1448.            topRb = (JRadioButtonMenuItem)add(new JRadioButtonMenuItem("Top"));
  1449.        topRb.getAccessibleContext().setAccessibleDescription("Position the TabbedPane on the top of the window");
  1450.            topRb.setSelected(true);
  1451.            topRb.addItemListener(this);
  1452.            tabGroup.add(topRb);
  1453.         
  1454.            leftRb = (JRadioButtonMenuItem)add(new JRadioButtonMenuItem("Left"));
  1455.        leftRb.getAccessibleContext().setAccessibleDescription("Position the TabbedPane on the left of the window");
  1456.            leftRb.addItemListener(this);
  1457.            tabGroup.add(leftRb);
  1458.  
  1459.            bottomRb = (JRadioButtonMenuItem)add(new JRadioButtonMenuItem("Bottom"));
  1460.        bottomRb.getAccessibleContext().setAccessibleDescription("Position the TabbedPane on the bottom of the window");
  1461.            bottomRb.addItemListener(this);
  1462.            tabGroup.add(bottomRb);
  1463.  
  1464.            rightRb = (JRadioButtonMenuItem)add(new JRadioButtonMenuItem("Right"));
  1465.        rightRb.getAccessibleContext().setAccessibleDescription("Position the TabbedPane on the right of the window");
  1466.            rightRb.addItemListener(this);
  1467.            tabGroup.add(rightRb);
  1468.         }
  1469.  
  1470.     public void itemStateChanged(ItemEvent e) {
  1471.         JRadioButtonMenuItem rb = (JRadioButtonMenuItem) e.getSource();
  1472.             if (rb.isSelected()) {
  1473.                 String selected = rb.getText();
  1474.                 int placement;
  1475.                 if (selected.equals("Top")) {
  1476.                     placement = JTabbedPane.TOP;
  1477.                 } else if (selected.equals("Left")) {
  1478.                     placement = JTabbedPane.LEFT;
  1479.                 } else if (selected.equals("Bottom")) {
  1480.                     placement = JTabbedPane.BOTTOM;
  1481.                 } else {
  1482.                     placement = JTabbedPane.RIGHT;
  1483.                 }
  1484.                 tabbedPane.setTabPlacement(placement);
  1485.                 tabbedPane.validate();
  1486.             }
  1487.         }
  1488.         public void setEnabled(boolean enabled) {
  1489.             super.setEnabled(enabled);
  1490.             if (!enabled) {
  1491.                 topRb.setSelected(true);
  1492.             } else {
  1493.                 int placement = tabbedPane.getTabPlacement();
  1494.                 switch(placement) {
  1495.                   case JTabbedPane.TOP:
  1496.                       topRb.setSelected(true);
  1497.                       break;
  1498.                   case JTabbedPane.LEFT:
  1499.                       leftRb.setSelected(true);
  1500.                       break;
  1501.                   case JTabbedPane.BOTTOM:
  1502.                       bottomRb.setSelected(true);
  1503.                       break;
  1504.                   case JTabbedPane.RIGHT:
  1505.                       rightRb.setSelected(true);
  1506.                       break;
  1507.                   default:
  1508.                 }
  1509.             }
  1510.         }
  1511.     }
  1512.                     
  1513.  
  1514.     // ***********************************************************
  1515.     // *********** Create the button controls listeners **********
  1516.     // ***********************************************************
  1517.     ItemListener buttonPadListener = new ItemListener() {
  1518.     Component c;
  1519.     AbstractButton b;
  1520.  
  1521.     public void itemStateChanged(ItemEvent e) {
  1522.         // *** pad = 0
  1523.         int pad = 0;
  1524.         JRadioButton rb = (JRadioButton) e.getSource();
  1525.         if(rb.getText().equals("Default")) {
  1526.         for(int i = 0; i < currentControls.size(); i++) {
  1527.             b = (AbstractButton) currentControls.elementAt(i);
  1528.                 // *** pad = Default
  1529.             b.setMargin(null);
  1530.         }
  1531.         int index = tabbedPane.getSelectedIndex();
  1532.         Component currentPage = tabbedPane.getComponentAt(index);
  1533.         currentPage.invalidate();
  1534.         currentPage.validate();
  1535.         currentPage.repaint();
  1536.         return;
  1537.         } else if(rb.getText().equals("10")) {
  1538.             // pad = 10
  1539.         pad = 10;
  1540.         }
  1541.  
  1542.         for(int i = 0; i < currentControls.size(); i++) {
  1543.         b = (AbstractButton) currentControls.elementAt(i);
  1544.         b.setMargin(new Insets(pad,pad,pad,pad));
  1545.         }
  1546.         int index = tabbedPane.getSelectedIndex();
  1547.         Component currentPage = tabbedPane.getComponentAt(index);
  1548.         currentPage.invalidate();
  1549.         currentPage.validate();
  1550.         currentPage.repaint();
  1551.     }
  1552.     };
  1553.  
  1554.     ItemListener buttonDisplayListener = new ItemListener() {
  1555.     Component c;
  1556.     AbstractButton b;
  1557.  
  1558.     public void itemStateChanged(ItemEvent e) {
  1559.         JCheckBox cb = (JCheckBox) e.getSource();
  1560.         if(cb.getText().equals("Enabled")) {
  1561.         for(int i = 0; i < currentControls.size(); i++) {
  1562.             c = (Component) currentControls.elementAt(i);
  1563.             c.setEnabled(cb.isSelected());
  1564.             c.invalidate();
  1565.         }
  1566.         } else if(cb.getText().equals("Paint Border")) {
  1567.         c = (Component) currentControls.elementAt(0);
  1568.         if(c instanceof AbstractButton) {
  1569.             for(int i = 0; i < currentControls.size(); i++) {
  1570.             b = (AbstractButton) currentControls.elementAt(i);
  1571.             b.setBorderPainted(cb.isSelected());
  1572.                 b.invalidate();
  1573.             }
  1574.         }
  1575.         } else if(cb.getText().equals("Paint Focus")) {
  1576.         c = (Component) currentControls.elementAt(0);
  1577.         if(c instanceof AbstractButton) {
  1578.             for(int i = 0; i < currentControls.size(); i++) {
  1579.             b = (AbstractButton) currentControls.elementAt(i);
  1580.             b.setFocusPainted(cb.isSelected());
  1581.                 b.invalidate();
  1582.             }
  1583.         }
  1584.         }
  1585.         int index = tabbedPane.getSelectedIndex();
  1586.         Component currentPage = tabbedPane.getComponentAt(index);
  1587.         currentPage.invalidate();
  1588.         currentPage.validate();
  1589.         currentPage.repaint();
  1590.     }
  1591.     };
  1592.  
  1593.     // Text Position
  1594.     ActionListener textPositionListener = new ActionListener() {
  1595.     public void actionPerformed(ActionEvent e) {
  1596.         JRadioButton rb = (JRadioButton) e.getSource();
  1597.         if(rb.isSelected()) {
  1598.         if(rb.getActionCommand().equals("NW")) {
  1599.             for(int i = 0; i < currentControls.size(); i++) {
  1600.             Component c = (Component) currentControls.elementAt(i);
  1601.             if(c instanceof AbstractButton) {
  1602.                 AbstractButton x = (AbstractButton) c;
  1603.                 setNWposition(x);
  1604.             } else if(c instanceof JLabel) {
  1605.                 JLabel x = (JLabel) c;
  1606.                 setNWposition(x);
  1607.             }
  1608.             }
  1609.         } else if(rb.getActionCommand().equals("N")) {
  1610.             for(int i = 0; i < currentControls.size(); i++) {
  1611.             Component c = (Component) currentControls.elementAt(i);
  1612.             if(c instanceof AbstractButton) {
  1613.                 AbstractButton x = (AbstractButton) c;
  1614.                 setNposition(x);
  1615.             } else if(c instanceof JLabel) {
  1616.                 JLabel x = (JLabel) c;
  1617.                 setNposition(x);
  1618.             }
  1619.             }
  1620.         } else if(rb.getActionCommand().equals("NE")) {
  1621.             for(int i = 0; i < currentControls.size(); i++) {
  1622.             Component c = (Component) currentControls.elementAt(i);
  1623.             if(c instanceof AbstractButton) {
  1624.                 AbstractButton x = (AbstractButton) c;
  1625.                 setNEposition(x);
  1626.             } else if(c instanceof JLabel) {
  1627.                 JLabel x = (JLabel) c;
  1628.                 setNEposition(x);
  1629.             }
  1630.             }
  1631.         } else if(rb.getActionCommand().equals("W")) {
  1632.             for(int i = 0; i < currentControls.size(); i++) {
  1633.             Component c = (Component) currentControls.elementAt(i);
  1634.             if(c instanceof AbstractButton) {
  1635.                 AbstractButton x = (AbstractButton) c;
  1636.                 setWposition(x);
  1637.             } else if(c instanceof JLabel) {
  1638.                 JLabel x = (JLabel) c;
  1639.                 setWposition(x);
  1640.             }
  1641.             }
  1642.         } else if(rb.getActionCommand().equals("C")) {
  1643.             for(int i = 0; i < currentControls.size(); i++) {
  1644.             Component c = (Component) currentControls.elementAt(i);
  1645.             if(c instanceof AbstractButton) {
  1646.                 AbstractButton x = (AbstractButton) c;
  1647.                 setCposition(x);
  1648.             } else if(c instanceof JLabel) {
  1649.                 JLabel x = (JLabel) c;
  1650.                 setCposition(x);
  1651.             }
  1652.             }
  1653.         } else if(rb.getActionCommand().equals("E")) {
  1654.             for(int i = 0; i < currentControls.size(); i++) {
  1655.             Component c = (Component) currentControls.elementAt(i);
  1656.             if(c instanceof AbstractButton) {
  1657.                 AbstractButton x = (AbstractButton) c;
  1658.                 setEposition(x);
  1659.             } else if(c instanceof JLabel) {
  1660.                 JLabel x = (JLabel) c;
  1661.                 setEposition(x);
  1662.             }
  1663.             }
  1664.         } else if(rb.getActionCommand().equals("SW")) {
  1665.             for(int i = 0; i < currentControls.size(); i++) {
  1666.             Component c = (Component) currentControls.elementAt(i);
  1667.             if(c instanceof AbstractButton) {
  1668.                 AbstractButton x = (AbstractButton) c;
  1669.                 setSWposition(x);
  1670.             } else if(c instanceof JLabel) {
  1671.                 JLabel x = (JLabel) c;
  1672.                 setSWposition(x);
  1673.             }
  1674.             }
  1675.         } else if(rb.getActionCommand().equals("S")) {
  1676.             for(int i = 0; i < currentControls.size(); i++) {
  1677.             Component c = (Component) currentControls.elementAt(i);
  1678.             if(c instanceof AbstractButton) {
  1679.                 AbstractButton x = (AbstractButton) c;
  1680.                 setSposition(x);
  1681.             } else if(c instanceof JLabel) {
  1682.                 JLabel x = (JLabel) c;
  1683.                 setSposition(x);
  1684.             }
  1685.             }
  1686.         } else if(rb.getActionCommand().equals("SE")) {
  1687.             for(int i = 0; i < currentControls.size(); i++) {
  1688.             Component c = (Component) currentControls.elementAt(i);
  1689.             if(c instanceof AbstractButton) {
  1690.                 AbstractButton x = (AbstractButton) c;
  1691.                 setSEposition(x);
  1692.             } else if(c instanceof JLabel) {
  1693.                 JLabel x = (JLabel) c;
  1694.                 setSEposition(x);
  1695.             }
  1696.             }
  1697.         }
  1698.         int index = tabbedPane.getSelectedIndex();
  1699.                 Component currentPage = tabbedPane.getComponentAt(index);
  1700.         currentPage.invalidate();
  1701.         currentPage.validate();
  1702.         currentPage.repaint();
  1703.         } else {
  1704.         }
  1705.     }
  1706.     };
  1707.  
  1708.  
  1709.     // Label Alignment
  1710.     ActionListener labelAlignmentListener = new ActionListener() {
  1711.     public void actionPerformed(ActionEvent e) {
  1712.         JRadioButton rb = (JRadioButton) e.getSource();
  1713.         if(rb.isSelected()) {
  1714.         if(rb.getActionCommand().equals("NW")) {
  1715.             for(int i = 0; i < currentControls.size(); i++) {
  1716.             Component c = (Component) currentControls.elementAt(i);
  1717.             if(c instanceof AbstractButton) {
  1718.                 AbstractButton x = (AbstractButton) c;
  1719.                 setNWalignment(x);
  1720.                 x.invalidate();
  1721.             } else if(c instanceof JLabel) {
  1722.                 JLabel x = (JLabel) c;
  1723.                 setNWalignment(x);
  1724.                 x.invalidate();
  1725.             }
  1726.             }
  1727.         } else if(rb.getActionCommand().equals("N")) {
  1728.             for(int i = 0; i < currentControls.size(); i++) {
  1729.             Component c = (Component) currentControls.elementAt(i);
  1730.             if(c instanceof AbstractButton) {
  1731.                 AbstractButton x = (AbstractButton) c;
  1732.                 setNalignment(x);
  1733.                 x.invalidate();
  1734.             } else if(c instanceof JLabel) {
  1735.                 JLabel x = (JLabel) c;
  1736.                 setNalignment(x);
  1737.                 x.invalidate();
  1738.             }
  1739.             }
  1740.         } else if(rb.getActionCommand().equals("NE")) {
  1741.             for(int i = 0; i < currentControls.size(); i++) {
  1742.             Component c = (Component) currentControls.elementAt(i);
  1743.             if(c instanceof AbstractButton) {
  1744.                 AbstractButton x = (AbstractButton) c;
  1745.                 setNEalignment(x);
  1746.                 x.invalidate();
  1747.             } else if(c instanceof JLabel) {
  1748.                 JLabel x = (JLabel) c;
  1749.                 setNEalignment(x);
  1750.                 x.invalidate();
  1751.             }
  1752.             }
  1753.         } else if(rb.getActionCommand().equals("W")) {
  1754.             for(int i = 0; i < currentControls.size(); i++) {
  1755.             Component c = (Component) currentControls.elementAt(i);
  1756.             if(c instanceof AbstractButton) {
  1757.                 AbstractButton x = (AbstractButton) c;
  1758.                 setWalignment(x);
  1759.                 x.invalidate();
  1760.             } else if(c instanceof JLabel) {
  1761.                 JLabel x = (JLabel) c;
  1762.                 setWalignment(x);
  1763.                 x.invalidate();
  1764.             }
  1765.             }
  1766.         } else if(rb.getActionCommand().equals("C")) {
  1767.             for(int i = 0; i < currentControls.size(); i++) {
  1768.             Component c = (Component) currentControls.elementAt(i);
  1769.             if(c instanceof AbstractButton) {
  1770.                 AbstractButton x = (AbstractButton) c;
  1771.                 setCalignment(x);
  1772.                 x.invalidate();
  1773.             } else if(c instanceof JLabel) {
  1774.                 JLabel x = (JLabel) c;
  1775.                 setCalignment(x);
  1776.                 x.invalidate();
  1777.             }
  1778.             }
  1779.         } else if(rb.getActionCommand().equals("E")) {
  1780.             for(int i = 0; i < currentControls.size(); i++) {
  1781.             Component c = (Component) currentControls.elementAt(i);
  1782.             if(c instanceof AbstractButton) {
  1783.                 AbstractButton x = (AbstractButton) c;
  1784.                 setEalignment(x);
  1785.                 x.invalidate();
  1786.             } else if(c instanceof JLabel) {
  1787.                 JLabel x = (JLabel) c;
  1788.                 setEalignment(x);
  1789.                 x.invalidate();
  1790.             }
  1791.             }
  1792.         } else if(rb.getActionCommand().equals("SW")) {
  1793.             for(int i = 0; i < currentControls.size(); i++) {
  1794.             Component c = (Component) currentControls.elementAt(i);
  1795.             if(c instanceof AbstractButton) {
  1796.                 AbstractButton x = (AbstractButton) c;
  1797.                 setSWalignment(x);
  1798.                 x.invalidate();
  1799.             } else if(c instanceof JLabel) {
  1800.                 JLabel x = (JLabel) c;
  1801.                 setSWalignment(x);
  1802.                 x.invalidate();
  1803.             }
  1804.             }
  1805.         } else if(rb.getActionCommand().equals("S")) {
  1806.             for(int i = 0; i < currentControls.size(); i++) {
  1807.             Component c = (Component) currentControls.elementAt(i);
  1808.             if(c instanceof AbstractButton) {
  1809.                 AbstractButton x = (AbstractButton) c;
  1810.                 setSalignment(x);
  1811.                 x.invalidate();
  1812.             } else if(c instanceof JLabel) {
  1813.                 JLabel x = (JLabel) c;
  1814.                 setSalignment(x);
  1815.                 x.invalidate();
  1816.             }
  1817.             }
  1818.         } else if(rb.getActionCommand().equals("SE")) {
  1819.             for(int i = 0; i < currentControls.size(); i++) {
  1820.             Component c = (Component) currentControls.elementAt(i);
  1821.             if(c instanceof AbstractButton) {
  1822.                 AbstractButton x = (AbstractButton) c;
  1823.                 setSEalignment(x);
  1824.                 x.invalidate();
  1825.             } else if(c instanceof JLabel) {
  1826.                 JLabel x = (JLabel) c;
  1827.                 setSEalignment(x);
  1828.                 x.invalidate();
  1829.             }
  1830.             }
  1831.         }
  1832.         int index = tabbedPane.getSelectedIndex();
  1833.                 Component currentPage = tabbedPane.getComponentAt(index);
  1834.         currentPage.invalidate();
  1835.         currentPage.validate();
  1836.         currentPage.repaint();
  1837.         }
  1838.     }
  1839.     };
  1840.  
  1841.     // Title Pane tile position
  1842.     ActionListener borderedPaneListener = new ActionListener() {
  1843.     public void actionPerformed(ActionEvent e) {
  1844.         JRadioButton b = (JRadioButton) e.getSource();
  1845.         if(b.getText().equals("Above Top")) {((TitledBorder)borderedPane.getBorder()).setTitlePosition(TitledBorder.ABOVE_TOP);}
  1846.         if(b.getText().equals("Top")) {((TitledBorder)borderedPane.getBorder()).setTitlePosition(TitledBorder.TOP);}
  1847.         if(b.getText().equals("Below Top")) {((TitledBorder)borderedPane.getBorder()).setTitlePosition(TitledBorder.BELOW_TOP);}
  1848.  
  1849.         if(b.getText().equals("Above Bottom")) {((TitledBorder)borderedPane.getBorder()).setTitlePosition(TitledBorder.ABOVE_BOTTOM);}
  1850.         if(b.getText().equals("Bottom")) {((TitledBorder)borderedPane.getBorder()).setTitlePosition(TitledBorder.BOTTOM);}
  1851.         if(b.getText().equals("Below Bottom")) {((TitledBorder)borderedPane.getBorder()).setTitlePosition(TitledBorder.BELOW_BOTTOM);}
  1852.  
  1853.         if(b.getText().equals("Left")) {((TitledBorder)borderedPane.getBorder()).setTitleJustification(TitledBorder.LEFT);}
  1854.         if(b.getText().equals("Center")) {((TitledBorder)borderedPane.getBorder()).setTitleJustification(TitledBorder.CENTER);}
  1855.         if(b.getText().equals("Right")) {((TitledBorder)borderedPane.getBorder()).setTitleJustification(TitledBorder.RIGHT);}
  1856.  
  1857.         borderedPane.invalidate();
  1858.         borderedPane.validate();
  1859.         borderedPane.repaint();
  1860.     }
  1861.     };
  1862.  
  1863.     public static JPanel createHorizontalPanel(boolean threeD) {
  1864.     JPanel p = new JPanel();
  1865.     p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
  1866.     if(threeD) {
  1867.         p.setBorder(loweredBorder);
  1868.     }
  1869.     return p;
  1870.     }
  1871.  
  1872.     public static JPanel createVerticalPanel(boolean threeD) {
  1873.     JPanel p = new JPanel();
  1874.     p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
  1875.     if(threeD) {
  1876.         p.setBorder(loweredBorder);
  1877.     }    
  1878.     return p;
  1879.     }
  1880.  
  1881.     public static String contentsOfFile(String filename) {
  1882.     String s = new String();
  1883.     File f;
  1884.     char[] buff = new char[50000];
  1885.     InputStream is;
  1886.     InputStreamReader reader;
  1887.     boolean fromApplet = SwingSet.sharedInstance().isApplet();
  1888.     URL url;
  1889.  
  1890.     try {
  1891.       if(fromApplet) {
  1892.         url = new URL(SwingSet.sharedInstance().getApplet().getCodeBase(),filename);
  1893.         is = url.openStream();
  1894.         reader = new InputStreamReader(is);
  1895.       } else {
  1896.         f = new File(filename);
  1897.         reader = new FileReader(f);
  1898.       }
  1899.       int nch;
  1900.       while ((nch = reader.read(buff, 0, buff.length)) != -1) {
  1901.         s = s + new String(buff, 0, nch);
  1902.       }
  1903.     } catch (java.io.IOException ex) {
  1904.         s = "Could not load file: " + filename;
  1905.     }
  1906.  
  1907.     return s;
  1908.     }
  1909.  
  1910.     class ColoredSquare implements Icon {
  1911.     Color color;
  1912.     public ColoredSquare(Color c) {
  1913.         this.color = c;
  1914.     }
  1915.  
  1916.     public void paintIcon(Component c, Graphics g, int x, int y) {
  1917.         Color oldColor = g.getColor();
  1918.         g.setColor(color);
  1919.         g.fill3DRect(x,y,getIconWidth(), getIconHeight(), true);
  1920.         g.setColor(oldColor);
  1921.     }
  1922.     public int getIconWidth() { return 12; }
  1923.     public int getIconHeight() { return 12; }
  1924.  
  1925.     }
  1926.  
  1927.   public ImageIcon loadImageIcon(String filename, String description) {
  1928.     if(applet == null) {
  1929.       return new ImageIcon(filename, description);
  1930.     } else {
  1931.       URL url;
  1932.       try {
  1933.     url = new URL(applet.getCodeBase(),filename);
  1934.       } catch(MalformedURLException e) {
  1935.       System.err.println("Error trying to load image " + filename);
  1936.       return null;
  1937.       }
  1938.       return new ImageIcon(url, description);
  1939.     }
  1940.   }
  1941.  
  1942.   public static SwingSet sharedInstance() {
  1943.     return instance;
  1944.   }
  1945.  
  1946.   public java.applet.Applet getApplet() {
  1947.     return applet;
  1948.   }
  1949.  
  1950.   public boolean isApplet() {
  1951.     return (applet != null);
  1952.   }
  1953.  
  1954.   public Container getRootComponent() {
  1955.     if(isApplet())
  1956.       return applet;
  1957.     else
  1958.       return frame;
  1959.   }
  1960.  
  1961.   public Frame getFrame() {
  1962.     if(isApplet()) {
  1963.       Container parent;
  1964.       for(parent = getApplet(); parent != null && !(parent instanceof Frame) ; parent = parent.getParent());
  1965.       if(parent != null)
  1966.     return (Frame)parent;
  1967.       else
  1968.     return null;
  1969.     } else
  1970.       return frame;
  1971.   }
  1972. }
  1973.