|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  */ | 
|  |  | 
|  | package javax.swing.plaf.basic; | 
|  |  | 
|  | import java.awt.Font; | 
|  | import java.awt.Color; | 
|  | import java.awt.SystemColor; | 
|  | import java.awt.event.*; | 
|  | import java.awt.Insets; | 
|  | import java.awt.Component; | 
|  | import java.awt.Container; | 
|  | import java.awt.FocusTraversalPolicy; | 
|  | import java.awt.AWTEvent; | 
|  | import java.awt.Toolkit; | 
|  | import java.awt.Point; | 
|  | import java.net.URL; | 
|  | import java.io.*; | 
|  | import java.awt.Dimension; | 
|  | import java.awt.KeyboardFocusManager; | 
|  | import java.security.AccessController; | 
|  | import java.security.PrivilegedAction; | 
|  | import java.util.*; | 
|  | import java.lang.reflect.*; | 
|  | import javax.sound.sampled.*; | 
|  |  | 
|  | import sun.awt.AppContext; | 
|  | import sun.awt.SunToolkit; | 
|  |  | 
|  | import sun.swing.SwingLazyValue; | 
|  | import sun.swing.SwingUtilities2; | 
|  |  | 
|  | import javax.swing.LookAndFeel; | 
|  | import javax.swing.AbstractAction; | 
|  | import javax.swing.Action; | 
|  | import javax.swing.ActionMap; | 
|  | import javax.swing.BorderFactory; | 
|  | import javax.swing.JComponent; | 
|  | import javax.swing.ImageIcon; | 
|  | import javax.swing.UIDefaults; | 
|  | import javax.swing.UIManager; | 
|  | import javax.swing.KeyStroke; | 
|  | import javax.swing.JTextField; | 
|  | import javax.swing.DefaultListCellRenderer; | 
|  | import javax.swing.FocusManager; | 
|  | import javax.swing.LayoutFocusTraversalPolicy; | 
|  | import javax.swing.SwingUtilities; | 
|  | import javax.swing.MenuSelectionManager; | 
|  | import javax.swing.MenuElement; | 
|  | import javax.swing.border.*; | 
|  | import javax.swing.plaf.*; | 
|  | import javax.swing.text.JTextComponent; | 
|  | import javax.swing.text.DefaultEditorKit; | 
|  | import javax.swing.JInternalFrame; | 
|  | import java.beans.PropertyVetoException; | 
|  | import java.awt.Window; | 
|  | import java.beans.PropertyChangeListener; | 
|  | import java.beans.PropertyChangeEvent; | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  */ | 
|  | public abstract class BasicLookAndFeel extends LookAndFeel implements Serializable | 
|  | { | 
|  |      | 
|  |  | 
|  |      */ | 
|  |     static boolean needsEventHelper; | 
|  |  | 
|  |      | 
|  |  | 
|  |      */ | 
|  |     private transient Object audioLock = new Object(); | 
|  |      | 
|  |  | 
|  |      */ | 
|  |     private Clip clipPlaying; | 
|  |  | 
|  |     AWTEventHelper invocator = null; | 
|  |  | 
|  |      | 
|  |  | 
|  |      */ | 
|  |     private PropertyChangeListener disposer = null; | 
|  |  | 
|  |      | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |      */ | 
|  |     public UIDefaults getDefaults() { | 
|  |         UIDefaults table = new UIDefaults(610, 0.75f); | 
|  |  | 
|  |         initClassDefaults(table); | 
|  |         initSystemColorDefaults(table); | 
|  |         initComponentDefaults(table); | 
|  |  | 
|  |         return table; | 
|  |     } | 
|  |  | 
|  |      | 
|  |  | 
|  |      */ | 
|  |     public void initialize() { | 
|  |         if (needsEventHelper) { | 
|  |             installAWTEventListener(); | 
|  |         } | 
|  |     } | 
|  |  | 
|  |     void installAWTEventListener() { | 
|  |         if (invocator == null) { | 
|  |             invocator = new AWTEventHelper(); | 
|  |             needsEventHelper = true; | 
|  |  | 
|  |             // Add a PropertyChangeListener to our AppContext so we're alerted | 
|  |             // when the AppContext is disposed(), at which time this laf should | 
|  |              | 
|  |             disposer = new PropertyChangeListener() { | 
|  |                 public void propertyChange(PropertyChangeEvent prpChg) { | 
|  |                     uninitialize(); | 
|  |                 } | 
|  |             }; | 
|  |             AppContext.getAppContext().addPropertyChangeListener( | 
|  |                                                         AppContext.GUI_DISPOSED, | 
|  |                                                         disposer); | 
|  |         } | 
|  |     } | 
|  |  | 
|  |      | 
|  |  | 
|  |      */ | 
|  |     public void uninitialize() { | 
|  |         AppContext context = AppContext.getAppContext(); | 
|  |         synchronized (BasicPopupMenuUI.MOUSE_GRABBER_KEY) { | 
|  |             Object grabber = context.get(BasicPopupMenuUI.MOUSE_GRABBER_KEY); | 
|  |             if (grabber != null) { | 
|  |                 ((BasicPopupMenuUI.MouseGrabber)grabber).uninstall(); | 
|  |             } | 
|  |         } | 
|  |         synchronized (BasicPopupMenuUI.MENU_KEYBOARD_HELPER_KEY) { | 
|  |             Object helper = | 
|  |                     context.get(BasicPopupMenuUI.MENU_KEYBOARD_HELPER_KEY); | 
|  |             if (helper != null) { | 
|  |                 ((BasicPopupMenuUI.MenuKeyboardHelper)helper).uninstall(); | 
|  |             } | 
|  |         } | 
|  |  | 
|  |         if(invocator != null) { | 
|  |             AccessController.doPrivileged(invocator); | 
|  |             invocator = null; | 
|  |         } | 
|  |  | 
|  |         if (disposer != null) { | 
|  |             // Note that we're likely calling removePropertyChangeListener() | 
|  |             // during the course of AppContext.firePropertyChange(). | 
|  |             // However, EventListenerAggreggate has code to safely modify | 
|  |              | 
|  |             context.removePropertyChangeListener(AppContext.GUI_DISPOSED, | 
|  |                                                  disposer); | 
|  |             disposer = null; | 
|  |         } | 
|  |     } | 
|  |  | 
|  |      | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |      */ | 
|  |     protected void initClassDefaults(UIDefaults table) | 
|  |     { | 
|  |         final String basicPackageName = "javax.swing.plaf.basic."; | 
|  |         Object[] uiDefaults = { | 
|  |                    "ButtonUI", basicPackageName + "BasicButtonUI", | 
|  |                  "CheckBoxUI", basicPackageName + "BasicCheckBoxUI", | 
|  |              "ColorChooserUI", basicPackageName + "BasicColorChooserUI", | 
|  |        "FormattedTextFieldUI", basicPackageName + "BasicFormattedTextFieldUI", | 
|  |                   "MenuBarUI", basicPackageName + "BasicMenuBarUI", | 
|  |                      "MenuUI", basicPackageName + "BasicMenuUI", | 
|  |                  "MenuItemUI", basicPackageName + "BasicMenuItemUI", | 
|  |          "CheckBoxMenuItemUI", basicPackageName + "BasicCheckBoxMenuItemUI", | 
|  |       "RadioButtonMenuItemUI", basicPackageName + "BasicRadioButtonMenuItemUI", | 
|  |               "RadioButtonUI", basicPackageName + "BasicRadioButtonUI", | 
|  |              "ToggleButtonUI", basicPackageName + "BasicToggleButtonUI", | 
|  |                 "PopupMenuUI", basicPackageName + "BasicPopupMenuUI", | 
|  |               "ProgressBarUI", basicPackageName + "BasicProgressBarUI", | 
|  |                 "ScrollBarUI", basicPackageName + "BasicScrollBarUI", | 
|  |                "ScrollPaneUI", basicPackageName + "BasicScrollPaneUI", | 
|  |                 "SplitPaneUI", basicPackageName + "BasicSplitPaneUI", | 
|  |                    "SliderUI", basicPackageName + "BasicSliderUI", | 
|  |                 "SeparatorUI", basicPackageName + "BasicSeparatorUI", | 
|  |                   "SpinnerUI", basicPackageName + "BasicSpinnerUI", | 
|  |          "ToolBarSeparatorUI", basicPackageName + "BasicToolBarSeparatorUI", | 
|  |        "PopupMenuSeparatorUI", basicPackageName + "BasicPopupMenuSeparatorUI", | 
|  |                "TabbedPaneUI", basicPackageName + "BasicTabbedPaneUI", | 
|  |                  "TextAreaUI", basicPackageName + "BasicTextAreaUI", | 
|  |                 "TextFieldUI", basicPackageName + "BasicTextFieldUI", | 
|  |             "PasswordFieldUI", basicPackageName + "BasicPasswordFieldUI", | 
|  |                  "TextPaneUI", basicPackageName + "BasicTextPaneUI", | 
|  |                "EditorPaneUI", basicPackageName + "BasicEditorPaneUI", | 
|  |                      "TreeUI", basicPackageName + "BasicTreeUI", | 
|  |                     "LabelUI", basicPackageName + "BasicLabelUI", | 
|  |                      "ListUI", basicPackageName + "BasicListUI", | 
|  |                   "ToolBarUI", basicPackageName + "BasicToolBarUI", | 
|  |                   "ToolTipUI", basicPackageName + "BasicToolTipUI", | 
|  |                  "ComboBoxUI", basicPackageName + "BasicComboBoxUI", | 
|  |                     "TableUI", basicPackageName + "BasicTableUI", | 
|  |               "TableHeaderUI", basicPackageName + "BasicTableHeaderUI", | 
|  |             "InternalFrameUI", basicPackageName + "BasicInternalFrameUI", | 
|  |               "DesktopPaneUI", basicPackageName + "BasicDesktopPaneUI", | 
|  |               "DesktopIconUI", basicPackageName + "BasicDesktopIconUI", | 
|  |               "FileChooserUI", basicPackageName + "BasicFileChooserUI", | 
|  |                "OptionPaneUI", basicPackageName + "BasicOptionPaneUI", | 
|  |                     "PanelUI", basicPackageName + "BasicPanelUI", | 
|  |                  "ViewportUI", basicPackageName + "BasicViewportUI", | 
|  |                  "RootPaneUI", basicPackageName + "BasicRootPaneUI", | 
|  |         }; | 
|  |  | 
|  |         table.putDefaults(uiDefaults); | 
|  |     } | 
|  |  | 
|  |      | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |      */ | 
|  |     protected void initSystemColorDefaults(UIDefaults table) | 
|  |     { | 
|  |         String[] defaultSystemColors = { | 
|  |                 "desktop", "#005C5C",  | 
|  |           "activeCaption", "#000080",  | 
|  |       "activeCaptionText", "#FFFFFF",  | 
|  |     "activeCaptionBorder", "#C0C0C0",  | 
|  |         "inactiveCaption", "#808080",  | 
|  |     "inactiveCaptionText", "#C0C0C0",  | 
|  |   "inactiveCaptionBorder", "#C0C0C0",  | 
|  |                  "window", "#FFFFFF",  | 
|  |            "windowBorder", "#000000",  | 
|  |              "windowText", "#000000",  | 
|  |                    "menu", "#C0C0C0",  | 
|  |                "menuText", "#000000",  | 
|  |                    "text", "#C0C0C0",  | 
|  |                "textText", "#000000",  | 
|  |           "textHighlight", "#000080",  | 
|  |       "textHighlightText", "#FFFFFF",  | 
|  |        "textInactiveText", "#808080",  | 
|  |                 "control", "#C0C0C0",  | 
|  |             "controlText", "#000000",  | 
|  |        "controlHighlight", "#C0C0C0",  | 
|  |      "controlLtHighlight", "#FFFFFF",  | 
|  |           "controlShadow", "#808080",  | 
|  |         "controlDkShadow", "#000000",  | 
|  |               "scrollbar", "#E0E0E0",  | 
|  |                    "info", "#FFFFE1",  | 
|  |                "infoText", "#000000"  /* ??? */ | 
|  |         }; | 
|  |  | 
|  |         loadSystemColors(table, defaultSystemColors, isNativeLookAndFeel()); | 
|  |     } | 
|  |  | 
|  |  | 
|  |      | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |      */ | 
|  |     protected void loadSystemColors(UIDefaults table, String[] systemColors, boolean useNative) | 
|  |     { | 
|  |          | 
|  |  | 
|  |  | 
|  |          */ | 
|  |         if (useNative) { | 
|  |             for(int i = 0; i < systemColors.length; i += 2) { | 
|  |                 Color color = Color.black; | 
|  |                 try { | 
|  |                     String name = systemColors[i]; | 
|  |                     color = (Color)(SystemColor.class.getField(name).get(null)); | 
|  |                 } catch (Exception e) { | 
|  |                 } | 
|  |                 table.put(systemColors[i], new ColorUIResource(color)); | 
|  |             } | 
|  |         } else { | 
|  |             for(int i = 0; i < systemColors.length; i += 2) { | 
|  |                 Color color = Color.black; | 
|  |                 try { | 
|  |                     color = Color.decode(systemColors[i + 1]); | 
|  |                 } | 
|  |                 catch(NumberFormatException e) { | 
|  |                     e.printStackTrace(); | 
|  |                 } | 
|  |                 table.put(systemColors[i], new ColorUIResource(color)); | 
|  |             } | 
|  |         } | 
|  |     } | 
|  |      | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |      */ | 
|  |     private void initResourceBundle(UIDefaults table) { | 
|  |         table.setDefaultLocale( Locale.getDefault() ); | 
|  |         table.addResourceBundle( "com.sun.swing.internal.plaf.basic.resources.basic" ); | 
|  |     } | 
|  |  | 
|  |      | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |      */ | 
|  |     protected void initComponentDefaults(UIDefaults table) | 
|  |     { | 
|  |  | 
|  |         initResourceBundle(table); | 
|  |  | 
|  |          | 
|  |         Integer fiveHundred = new Integer(500); | 
|  |  | 
|  |          | 
|  |         Long oneThousand = new Long(1000); | 
|  |  | 
|  |          | 
|  |         Integer twelve = new Integer(12); | 
|  |         Integer fontPlain = new Integer(Font.PLAIN); | 
|  |         Integer fontBold = new Integer(Font.BOLD); | 
|  |         Object dialogPlain12 = new SwingLazyValue( | 
|  |                           "javax.swing.plaf.FontUIResource", | 
|  |                           null, | 
|  |                           new Object[] {Font.DIALOG, fontPlain, twelve}); | 
|  |         Object serifPlain12 = new SwingLazyValue( | 
|  |                           "javax.swing.plaf.FontUIResource", | 
|  |                           null, | 
|  |                           new Object[] {Font.SERIF, fontPlain, twelve}); | 
|  |         Object sansSerifPlain12 =  new SwingLazyValue( | 
|  |                           "javax.swing.plaf.FontUIResource", | 
|  |                           null, | 
|  |                           new Object[] {Font.SANS_SERIF, fontPlain, twelve}); | 
|  |         Object monospacedPlain12 = new SwingLazyValue( | 
|  |                           "javax.swing.plaf.FontUIResource", | 
|  |                           null, | 
|  |                           new Object[] {Font.MONOSPACED, fontPlain, twelve}); | 
|  |         Object dialogBold12 = new SwingLazyValue( | 
|  |                           "javax.swing.plaf.FontUIResource", | 
|  |                           null, | 
|  |                           new Object[] {Font.DIALOG, fontBold, twelve}); | 
|  |  | 
|  |  | 
|  |          | 
|  |         ColorUIResource red = new ColorUIResource(Color.red); | 
|  |         ColorUIResource black = new ColorUIResource(Color.black); | 
|  |         ColorUIResource white = new ColorUIResource(Color.white); | 
|  |         ColorUIResource yellow = new ColorUIResource(Color.yellow); | 
|  |         ColorUIResource gray = new ColorUIResource(Color.gray); | 
|  |         ColorUIResource lightGray = new ColorUIResource(Color.lightGray); | 
|  |         ColorUIResource darkGray = new ColorUIResource(Color.darkGray); | 
|  |         ColorUIResource scrollBarTrack = new ColorUIResource(224, 224, 224); | 
|  |  | 
|  |         Color control = table.getColor("control"); | 
|  |         Color controlDkShadow = table.getColor("controlDkShadow"); | 
|  |         Color controlHighlight = table.getColor("controlHighlight"); | 
|  |         Color controlLtHighlight = table.getColor("controlLtHighlight"); | 
|  |         Color controlShadow = table.getColor("controlShadow"); | 
|  |         Color controlText = table.getColor("controlText"); | 
|  |         Color menu = table.getColor("menu"); | 
|  |         Color menuText = table.getColor("menuText"); | 
|  |         Color textHighlight = table.getColor("textHighlight"); | 
|  |         Color textHighlightText = table.getColor("textHighlightText"); | 
|  |         Color textInactiveText = table.getColor("textInactiveText"); | 
|  |         Color textText = table.getColor("textText"); | 
|  |         Color window = table.getColor("window"); | 
|  |  | 
|  |          | 
|  |         InsetsUIResource zeroInsets = new InsetsUIResource(0,0,0,0); | 
|  |         InsetsUIResource twoInsets = new InsetsUIResource(2,2,2,2); | 
|  |         InsetsUIResource threeInsets = new InsetsUIResource(3,3,3,3); | 
|  |  | 
|  |          | 
|  |         Object marginBorder = new SwingLazyValue( | 
|  |                           "javax.swing.plaf.basic.BasicBorders$MarginBorder"); | 
|  |         Object etchedBorder = new SwingLazyValue( | 
|  |                           "javax.swing.plaf.BorderUIResource", | 
|  |                           "getEtchedBorderUIResource"); | 
|  |         Object loweredBevelBorder = new SwingLazyValue( | 
|  |                           "javax.swing.plaf.BorderUIResource", | 
|  |                           "getLoweredBevelBorderUIResource"); | 
|  |  | 
|  |         Object popupMenuBorder = new SwingLazyValue( | 
|  |                           "javax.swing.plaf.basic.BasicBorders", | 
|  |                           "getInternalFrameBorder"); | 
|  |  | 
|  |         Object blackLineBorder = new SwingLazyValue( | 
|  |                           "javax.swing.plaf.BorderUIResource", | 
|  |                           "getBlackLineBorderUIResource"); | 
|  |         Object focusCellHighlightBorder = new SwingLazyValue( | 
|  |                           "javax.swing.plaf.BorderUIResource$LineBorderUIResource", | 
|  |                           null, | 
|  |                           new Object[] {yellow}); | 
|  |  | 
|  |         Object noFocusBorder = new BorderUIResource.EmptyBorderUIResource(1,1,1,1); | 
|  |  | 
|  |         Object tableHeaderBorder = new SwingLazyValue( | 
|  |                           "javax.swing.plaf.BorderUIResource$BevelBorderUIResource", | 
|  |                           null, | 
|  |                           new Object[] { new Integer(BevelBorder.RAISED), | 
|  |                                          controlLtHighlight, | 
|  |                                          control, | 
|  |                                          controlDkShadow, | 
|  |                                          controlShadow }); | 
|  |  | 
|  |  | 
|  |         // *** Button value objects | 
|  |  | 
|  |         Object buttonBorder = | 
|  |             new SwingLazyValue( | 
|  |                             "javax.swing.plaf.basic.BasicBorders", | 
|  |                             "getButtonBorder"); | 
|  |  | 
|  |         Object buttonToggleBorder = | 
|  |             new SwingLazyValue( | 
|  |                             "javax.swing.plaf.basic.BasicBorders", | 
|  |                             "getToggleButtonBorder"); | 
|  |  | 
|  |         Object radioButtonBorder = | 
|  |             new SwingLazyValue( | 
|  |                             "javax.swing.plaf.basic.BasicBorders", | 
|  |                             "getRadioButtonBorder"); | 
|  |  | 
|  |         // *** FileChooser / FileView value objects | 
|  |  | 
|  |         Object newFolderIcon = SwingUtilities2.makeIcon(getClass(), | 
|  |                                                         BasicLookAndFeel.class, | 
|  |                                                         "icons/NewFolder.gif"); | 
|  |         Object upFolderIcon = SwingUtilities2.makeIcon(getClass(), | 
|  |                                                        BasicLookAndFeel.class, | 
|  |                                                        "icons/UpFolder.gif"); | 
|  |         Object homeFolderIcon = SwingUtilities2.makeIcon(getClass(), | 
|  |                                                          BasicLookAndFeel.class, | 
|  |                                                          "icons/HomeFolder.gif"); | 
|  |         Object detailsViewIcon = SwingUtilities2.makeIcon(getClass(), | 
|  |                                                           BasicLookAndFeel.class, | 
|  |                                                           "icons/DetailsView.gif"); | 
|  |         Object listViewIcon = SwingUtilities2.makeIcon(getClass(), | 
|  |                                                        BasicLookAndFeel.class, | 
|  |                                                        "icons/ListView.gif"); | 
|  |         Object directoryIcon = SwingUtilities2.makeIcon(getClass(), | 
|  |                                                         BasicLookAndFeel.class, | 
|  |                                                         "icons/Directory.gif"); | 
|  |         Object fileIcon = SwingUtilities2.makeIcon(getClass(), | 
|  |                                                    BasicLookAndFeel.class, | 
|  |                                                    "icons/File.gif"); | 
|  |         Object computerIcon = SwingUtilities2.makeIcon(getClass(), | 
|  |                                                        BasicLookAndFeel.class, | 
|  |                                                        "icons/Computer.gif"); | 
|  |         Object hardDriveIcon = SwingUtilities2.makeIcon(getClass(), | 
|  |                                                         BasicLookAndFeel.class, | 
|  |                                                         "icons/HardDrive.gif"); | 
|  |         Object floppyDriveIcon = SwingUtilities2.makeIcon(getClass(), | 
|  |                                                           BasicLookAndFeel.class, | 
|  |                                                           "icons/FloppyDrive.gif"); | 
|  |  | 
|  |  | 
|  |         // *** InternalFrame value objects | 
|  |  | 
|  |         Object internalFrameBorder = new SwingLazyValue( | 
|  |                 "javax.swing.plaf.basic.BasicBorders", | 
|  |                 "getInternalFrameBorder"); | 
|  |  | 
|  |         // *** List value objects | 
|  |  | 
|  |         Object listCellRendererActiveValue = new UIDefaults.ActiveValue() { | 
|  |             public Object createValue(UIDefaults table) { | 
|  |                 return new DefaultListCellRenderer.UIResource(); | 
|  |             } | 
|  |         }; | 
|  |  | 
|  |  | 
|  |         // *** Menus value objects | 
|  |  | 
|  |         Object menuBarBorder = | 
|  |             new SwingLazyValue( | 
|  |                 "javax.swing.plaf.basic.BasicBorders", | 
|  |                 "getMenuBarBorder"); | 
|  |  | 
|  |         Object menuItemCheckIcon = | 
|  |             new SwingLazyValue( | 
|  |                 "javax.swing.plaf.basic.BasicIconFactory", | 
|  |                 "getMenuItemCheckIcon"); | 
|  |  | 
|  |         Object menuItemArrowIcon = | 
|  |             new SwingLazyValue( | 
|  |                 "javax.swing.plaf.basic.BasicIconFactory", | 
|  |                 "getMenuItemArrowIcon"); | 
|  |  | 
|  |  | 
|  |         Object menuArrowIcon = | 
|  |             new SwingLazyValue( | 
|  |                 "javax.swing.plaf.basic.BasicIconFactory", | 
|  |                 "getMenuArrowIcon"); | 
|  |  | 
|  |         Object checkBoxIcon = | 
|  |             new SwingLazyValue( | 
|  |                 "javax.swing.plaf.basic.BasicIconFactory", | 
|  |                 "getCheckBoxIcon"); | 
|  |  | 
|  |         Object radioButtonIcon = | 
|  |             new SwingLazyValue( | 
|  |                 "javax.swing.plaf.basic.BasicIconFactory", | 
|  |                 "getRadioButtonIcon"); | 
|  |  | 
|  |         Object checkBoxMenuItemIcon = | 
|  |             new SwingLazyValue( | 
|  |                 "javax.swing.plaf.basic.BasicIconFactory", | 
|  |                 "getCheckBoxMenuItemIcon"); | 
|  |  | 
|  |         Object radioButtonMenuItemIcon = | 
|  |             new SwingLazyValue( | 
|  |                 "javax.swing.plaf.basic.BasicIconFactory", | 
|  |                 "getRadioButtonMenuItemIcon"); | 
|  |  | 
|  |         Object menuItemAcceleratorDelimiter = "+"; | 
|  |  | 
|  |         // *** OptionPane value objects | 
|  |  | 
|  |         Object optionPaneMinimumSize = new DimensionUIResource(262, 90); | 
|  |  | 
|  |         Integer zero =  new Integer(0); | 
|  |         Object zeroBorder = new SwingLazyValue( | 
|  |                            "javax.swing.plaf.BorderUIResource$EmptyBorderUIResource", | 
|  |                            new Object[] {zero, zero, zero, zero}); | 
|  |  | 
|  |         Integer ten = new Integer(10); | 
|  |         Object optionPaneBorder = new SwingLazyValue( | 
|  |                            "javax.swing.plaf.BorderUIResource$EmptyBorderUIResource", | 
|  |                            new Object[] {ten, ten, twelve, ten}); | 
|  |  | 
|  |         Object optionPaneButtonAreaBorder = new SwingLazyValue( | 
|  |                            "javax.swing.plaf.BorderUIResource$EmptyBorderUIResource", | 
|  |                            new Object[] {new Integer(6), zero, zero, zero}); | 
|  |  | 
|  |  | 
|  |         // *** ProgessBar value objects | 
|  |  | 
|  |         Object progressBarBorder = | 
|  |             new SwingLazyValue( | 
|  |                             "javax.swing.plaf.basic.BasicBorders", | 
|  |                             "getProgressBarBorder"); | 
|  |  | 
|  |         // ** ScrollBar value objects | 
|  |  | 
|  |         Object minimumThumbSize = new DimensionUIResource(8,8); | 
|  |         Object maximumThumbSize = new DimensionUIResource(4096,4096); | 
|  |  | 
|  |         // ** Slider value objects | 
|  |  | 
|  |         Object sliderFocusInsets = twoInsets; | 
|  |  | 
|  |         Object toolBarSeparatorSize = new DimensionUIResource( 10, 10 ); | 
|  |  | 
|  |  | 
|  |         // *** SplitPane value objects | 
|  |  | 
|  |         Object splitPaneBorder = | 
|  |             new SwingLazyValue( | 
|  |                             "javax.swing.plaf.basic.BasicBorders", | 
|  |                             "getSplitPaneBorder"); | 
|  |         Object splitPaneDividerBorder = | 
|  |             new SwingLazyValue( | 
|  |                             "javax.swing.plaf.basic.BasicBorders", | 
|  |                             "getSplitPaneDividerBorder"); | 
|  |  | 
|  |         // ** TabbedBane value objects | 
|  |  | 
|  |         Object tabbedPaneTabInsets = new InsetsUIResource(0, 4, 1, 4); | 
|  |  | 
|  |         Object tabbedPaneTabPadInsets = new InsetsUIResource(2, 2, 2, 1); | 
|  |  | 
|  |         Object tabbedPaneTabAreaInsets = new InsetsUIResource(3, 2, 0, 2); | 
|  |  | 
|  |         Object tabbedPaneContentBorderInsets = new InsetsUIResource(2, 2, 3, 3); | 
|  |  | 
|  |  | 
|  |         // *** Text value objects | 
|  |  | 
|  |         Object textFieldBorder = | 
|  |             new SwingLazyValue( | 
|  |                             "javax.swing.plaf.basic.BasicBorders", | 
|  |                             "getTextFieldBorder"); | 
|  |  | 
|  |         Object editorMargin = threeInsets; | 
|  |  | 
|  |         Object caretBlinkRate = fiveHundred; | 
|  |         Integer four = new Integer(4); | 
|  |  | 
|  |         Object[] allAuditoryCues = new Object[] { | 
|  |                 "CheckBoxMenuItem.commandSound", | 
|  |                 "InternalFrame.closeSound", | 
|  |                 "InternalFrame.maximizeSound", | 
|  |                 "InternalFrame.minimizeSound", | 
|  |                 "InternalFrame.restoreDownSound", | 
|  |                 "InternalFrame.restoreUpSound", | 
|  |                 "MenuItem.commandSound", | 
|  |                 "OptionPane.errorSound", | 
|  |                 "OptionPane.informationSound", | 
|  |                 "OptionPane.questionSound", | 
|  |                 "OptionPane.warningSound", | 
|  |                 "PopupMenu.popupSound", | 
|  |                 "RadioButtonMenuItem.commandSound"}; | 
|  |  | 
|  |         Object[] noAuditoryCues = new Object[] {"mute"}; | 
|  |  | 
|  |         // *** Component Defaults | 
|  |  | 
|  |         Object[] defaults = { | 
|  |              | 
|  |             "AuditoryCues.cueList", allAuditoryCues, | 
|  |             "AuditoryCues.allAuditoryCues", allAuditoryCues, | 
|  |             "AuditoryCues.noAuditoryCues", noAuditoryCues, | 
|  |             // this key defines which of the various cues to render. | 
|  |              | 
|  |             "AuditoryCues.playList", null, | 
|  |  | 
|  |              | 
|  |             "Button.defaultButtonFollowsFocus", Boolean.TRUE, | 
|  |             "Button.font", dialogPlain12, | 
|  |             "Button.background", control, | 
|  |             "Button.foreground", controlText, | 
|  |             "Button.shadow", controlShadow, | 
|  |             "Button.darkShadow", controlDkShadow, | 
|  |             "Button.light", controlHighlight, | 
|  |             "Button.highlight", controlLtHighlight, | 
|  |             "Button.border", buttonBorder, | 
|  |             "Button.margin", new InsetsUIResource(2, 14, 2, 14), | 
|  |             "Button.textIconGap", four, | 
|  |             "Button.textShiftOffset", zero, | 
|  |             "Button.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { | 
|  |                          "SPACE", "pressed", | 
|  |                 "released SPACE", "released", | 
|  |                          "ENTER", "pressed", | 
|  |                 "released ENTER", "released" | 
|  |               }), | 
|  |  | 
|  |             "ToggleButton.font", dialogPlain12, | 
|  |             "ToggleButton.background", control, | 
|  |             "ToggleButton.foreground", controlText, | 
|  |             "ToggleButton.shadow", controlShadow, | 
|  |             "ToggleButton.darkShadow", controlDkShadow, | 
|  |             "ToggleButton.light", controlHighlight, | 
|  |             "ToggleButton.highlight", controlLtHighlight, | 
|  |             "ToggleButton.border", buttonToggleBorder, | 
|  |             "ToggleButton.margin", new InsetsUIResource(2, 14, 2, 14), | 
|  |             "ToggleButton.textIconGap", four, | 
|  |             "ToggleButton.textShiftOffset", zero, | 
|  |             "ToggleButton.focusInputMap", | 
|  |               new UIDefaults.LazyInputMap(new Object[] { | 
|  |                             "SPACE", "pressed", | 
|  |                    "released SPACE", "released" | 
|  |                 }), | 
|  |  | 
|  |             "RadioButton.font", dialogPlain12, | 
|  |             "RadioButton.background", control, | 
|  |             "RadioButton.foreground", controlText, | 
|  |             "RadioButton.shadow", controlShadow, | 
|  |             "RadioButton.darkShadow", controlDkShadow, | 
|  |             "RadioButton.light", controlHighlight, | 
|  |             "RadioButton.highlight", controlLtHighlight, | 
|  |             "RadioButton.border", radioButtonBorder, | 
|  |             "RadioButton.margin", twoInsets, | 
|  |             "RadioButton.textIconGap", four, | 
|  |             "RadioButton.textShiftOffset", zero, | 
|  |             "RadioButton.icon", radioButtonIcon, | 
|  |             "RadioButton.focusInputMap", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                           "SPACE", "pressed", | 
|  |                  "released SPACE", "released", | 
|  |                          "RETURN", "pressed" | 
|  |               }), | 
|  |  | 
|  |             "CheckBox.font", dialogPlain12, | 
|  |             "CheckBox.background", control, | 
|  |             "CheckBox.foreground", controlText, | 
|  |             "CheckBox.border", radioButtonBorder, | 
|  |             "CheckBox.margin", twoInsets, | 
|  |             "CheckBox.textIconGap", four, | 
|  |             "CheckBox.textShiftOffset", zero, | 
|  |             "CheckBox.icon", checkBoxIcon, | 
|  |             "CheckBox.focusInputMap", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                             "SPACE", "pressed", | 
|  |                    "released SPACE", "released" | 
|  |                  }), | 
|  |             "FileChooser.useSystemExtensionHiding", Boolean.FALSE, | 
|  |  | 
|  |              | 
|  |             "ColorChooser.font", dialogPlain12, | 
|  |             "ColorChooser.background", control, | 
|  |             "ColorChooser.foreground", controlText, | 
|  |  | 
|  |             "ColorChooser.swatchesSwatchSize", new Dimension(10, 10), | 
|  |             "ColorChooser.swatchesRecentSwatchSize", new Dimension(10, 10), | 
|  |             "ColorChooser.swatchesDefaultRecentColor", control, | 
|  |  | 
|  |              | 
|  |             "ComboBox.font", sansSerifPlain12, | 
|  |             "ComboBox.background", window, | 
|  |             "ComboBox.foreground", textText, | 
|  |             "ComboBox.buttonBackground", control, | 
|  |             "ComboBox.buttonShadow", controlShadow, | 
|  |             "ComboBox.buttonDarkShadow", controlDkShadow, | 
|  |             "ComboBox.buttonHighlight", controlLtHighlight, | 
|  |             "ComboBox.selectionBackground", textHighlight, | 
|  |             "ComboBox.selectionForeground", textHighlightText, | 
|  |             "ComboBox.disabledBackground", control, | 
|  |             "ComboBox.disabledForeground", textInactiveText, | 
|  |             "ComboBox.timeFactor", oneThousand, | 
|  |             "ComboBox.isEnterSelectablePopup", Boolean.FALSE, | 
|  |             "ComboBox.ancestorInputMap", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                       "ESCAPE", "hidePopup", | 
|  |                      "PAGE_UP", "pageUpPassThrough", | 
|  |                    "PAGE_DOWN", "pageDownPassThrough", | 
|  |                         "HOME", "homePassThrough", | 
|  |                          "END", "endPassThrough", | 
|  |                        "ENTER", "enterPressed" | 
|  |                  }), | 
|  |             "ComboBox.noActionOnKeyNavigation", Boolean.FALSE, | 
|  |  | 
|  |             // *** FileChooser | 
|  |  | 
|  |             "FileChooser.newFolderIcon", newFolderIcon, | 
|  |             "FileChooser.upFolderIcon", upFolderIcon, | 
|  |             "FileChooser.homeFolderIcon", homeFolderIcon, | 
|  |             "FileChooser.detailsViewIcon", detailsViewIcon, | 
|  |             "FileChooser.listViewIcon", listViewIcon, | 
|  |             "FileChooser.readOnly", Boolean.FALSE, | 
|  |             "FileChooser.usesSingleFilePane", Boolean.FALSE, | 
|  |             "FileChooser.ancestorInputMap", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                      "ESCAPE", "cancelSelection", | 
|  |                      "F5", "refresh", | 
|  |                  }), | 
|  |  | 
|  |             "FileView.directoryIcon", directoryIcon, | 
|  |             "FileView.fileIcon", fileIcon, | 
|  |             "FileView.computerIcon", computerIcon, | 
|  |             "FileView.hardDriveIcon", hardDriveIcon, | 
|  |             "FileView.floppyDriveIcon", floppyDriveIcon, | 
|  |  | 
|  |              | 
|  |             "InternalFrame.titleFont", dialogBold12, | 
|  |             "InternalFrame.borderColor", control, | 
|  |             "InternalFrame.borderShadow", controlShadow, | 
|  |             "InternalFrame.borderDarkShadow", controlDkShadow, | 
|  |             "InternalFrame.borderHighlight", controlLtHighlight, | 
|  |             "InternalFrame.borderLight", controlHighlight, | 
|  |             "InternalFrame.border", internalFrameBorder, | 
|  |             "InternalFrame.icon",   SwingUtilities2.makeIcon(getClass(), | 
|  |                                                              BasicLookAndFeel.class, | 
|  |                                                              "icons/JavaCup16.png"), | 
|  |  | 
|  |              | 
|  |             "InternalFrame.maximizeIcon", | 
|  |             new SwingLazyValue( | 
|  |                            "javax.swing.plaf.basic.BasicIconFactory", | 
|  |                            "createEmptyFrameIcon"), | 
|  |             "InternalFrame.minimizeIcon", | 
|  |             new SwingLazyValue( | 
|  |                            "javax.swing.plaf.basic.BasicIconFactory", | 
|  |                            "createEmptyFrameIcon"), | 
|  |             "InternalFrame.iconifyIcon", | 
|  |             new SwingLazyValue( | 
|  |                            "javax.swing.plaf.basic.BasicIconFactory", | 
|  |                            "createEmptyFrameIcon"), | 
|  |             "InternalFrame.closeIcon", | 
|  |             new SwingLazyValue( | 
|  |                            "javax.swing.plaf.basic.BasicIconFactory", | 
|  |                            "createEmptyFrameIcon"), | 
|  |              | 
|  |             "InternalFrame.closeSound", null, | 
|  |             "InternalFrame.maximizeSound", null, | 
|  |             "InternalFrame.minimizeSound", null, | 
|  |             "InternalFrame.restoreDownSound", null, | 
|  |             "InternalFrame.restoreUpSound", null, | 
|  |  | 
|  |             "InternalFrame.activeTitleBackground", table.get("activeCaption"), | 
|  |             "InternalFrame.activeTitleForeground", table.get("activeCaptionText"), | 
|  |             "InternalFrame.inactiveTitleBackground", table.get("inactiveCaption"), | 
|  |             "InternalFrame.inactiveTitleForeground", table.get("inactiveCaptionText"), | 
|  |             "InternalFrame.windowBindings", new Object[] { | 
|  |               "shift ESCAPE", "showSystemMenu", | 
|  |                 "ctrl SPACE", "showSystemMenu", | 
|  |                     "ESCAPE", "hideSystemMenu"}, | 
|  |  | 
|  |             "InternalFrameTitlePane.iconifyButtonOpacity", Boolean.TRUE, | 
|  |             "InternalFrameTitlePane.maximizeButtonOpacity", Boolean.TRUE, | 
|  |             "InternalFrameTitlePane.closeButtonOpacity", Boolean.TRUE, | 
|  |  | 
|  |         "DesktopIcon.border", internalFrameBorder, | 
|  |  | 
|  |             "Desktop.minOnScreenInsets", threeInsets, | 
|  |             "Desktop.background", table.get("desktop"), | 
|  |             "Desktop.ancestorInputMap", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                  "ctrl F5", "restore", | 
|  |                  "ctrl F4", "close", | 
|  |                  "ctrl F7", "move", | 
|  |                  "ctrl F8", "resize", | 
|  |                    "RIGHT", "right", | 
|  |                 "KP_RIGHT", "right", | 
|  |              "shift RIGHT", "shrinkRight", | 
|  |           "shift KP_RIGHT", "shrinkRight", | 
|  |                     "LEFT", "left", | 
|  |                  "KP_LEFT", "left", | 
|  |               "shift LEFT", "shrinkLeft", | 
|  |            "shift KP_LEFT", "shrinkLeft", | 
|  |                       "UP", "up", | 
|  |                    "KP_UP", "up", | 
|  |                 "shift UP", "shrinkUp", | 
|  |              "shift KP_UP", "shrinkUp", | 
|  |                     "DOWN", "down", | 
|  |                  "KP_DOWN", "down", | 
|  |               "shift DOWN", "shrinkDown", | 
|  |            "shift KP_DOWN", "shrinkDown", | 
|  |                   "ESCAPE", "escape", | 
|  |                  "ctrl F9", "minimize", | 
|  |                 "ctrl F10", "maximize", | 
|  |                  "ctrl F6", "selectNextFrame", | 
|  |                 "ctrl TAB", "selectNextFrame", | 
|  |              "ctrl alt F6", "selectNextFrame", | 
|  |        "shift ctrl alt F6", "selectPreviousFrame", | 
|  |                 "ctrl F12", "navigateNext", | 
|  |           "shift ctrl F12", "navigatePrevious" | 
|  |               }), | 
|  |  | 
|  |              | 
|  |             "Label.font", dialogPlain12, | 
|  |             "Label.background", control, | 
|  |             "Label.foreground", controlText, | 
|  |             "Label.disabledForeground", white, | 
|  |             "Label.disabledShadow", controlShadow, | 
|  |             "Label.border", null, | 
|  |  | 
|  |              | 
|  |             "List.font", dialogPlain12, | 
|  |             "List.background", window, | 
|  |             "List.foreground", textText, | 
|  |             "List.selectionBackground", textHighlight, | 
|  |             "List.selectionForeground", textHighlightText, | 
|  |             "List.noFocusBorder", noFocusBorder, | 
|  |             "List.focusCellHighlightBorder", focusCellHighlightBorder, | 
|  |             "List.dropLineColor", controlShadow, | 
|  |             "List.border", null, | 
|  |             "List.cellRenderer", listCellRendererActiveValue, | 
|  |             "List.timeFactor", oneThousand, | 
|  |             "List.focusInputMap", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                            "ctrl C", "copy", | 
|  |                            "ctrl V", "paste", | 
|  |                            "ctrl X", "cut", | 
|  |                              "COPY", "copy", | 
|  |                             "PASTE", "paste", | 
|  |                               "CUT", "cut", | 
|  |                    "control INSERT", "copy", | 
|  |                      "shift INSERT", "paste", | 
|  |                      "shift DELETE", "cut", | 
|  |                                "UP", "selectPreviousRow", | 
|  |                             "KP_UP", "selectPreviousRow", | 
|  |                          "shift UP", "selectPreviousRowExtendSelection", | 
|  |                       "shift KP_UP", "selectPreviousRowExtendSelection", | 
|  |                     "ctrl shift UP", "selectPreviousRowExtendSelection", | 
|  |                  "ctrl shift KP_UP", "selectPreviousRowExtendSelection", | 
|  |                           "ctrl UP", "selectPreviousRowChangeLead", | 
|  |                        "ctrl KP_UP", "selectPreviousRowChangeLead", | 
|  |                              "DOWN", "selectNextRow", | 
|  |                           "KP_DOWN", "selectNextRow", | 
|  |                        "shift DOWN", "selectNextRowExtendSelection", | 
|  |                     "shift KP_DOWN", "selectNextRowExtendSelection", | 
|  |                   "ctrl shift DOWN", "selectNextRowExtendSelection", | 
|  |                "ctrl shift KP_DOWN", "selectNextRowExtendSelection", | 
|  |                         "ctrl DOWN", "selectNextRowChangeLead", | 
|  |                      "ctrl KP_DOWN", "selectNextRowChangeLead", | 
|  |                              "LEFT", "selectPreviousColumn", | 
|  |                           "KP_LEFT", "selectPreviousColumn", | 
|  |                        "shift LEFT", "selectPreviousColumnExtendSelection", | 
|  |                     "shift KP_LEFT", "selectPreviousColumnExtendSelection", | 
|  |                   "ctrl shift LEFT", "selectPreviousColumnExtendSelection", | 
|  |                "ctrl shift KP_LEFT", "selectPreviousColumnExtendSelection", | 
|  |                         "ctrl LEFT", "selectPreviousColumnChangeLead", | 
|  |                      "ctrl KP_LEFT", "selectPreviousColumnChangeLead", | 
|  |                             "RIGHT", "selectNextColumn", | 
|  |                          "KP_RIGHT", "selectNextColumn", | 
|  |                       "shift RIGHT", "selectNextColumnExtendSelection", | 
|  |                    "shift KP_RIGHT", "selectNextColumnExtendSelection", | 
|  |                  "ctrl shift RIGHT", "selectNextColumnExtendSelection", | 
|  |               "ctrl shift KP_RIGHT", "selectNextColumnExtendSelection", | 
|  |                        "ctrl RIGHT", "selectNextColumnChangeLead", | 
|  |                     "ctrl KP_RIGHT", "selectNextColumnChangeLead", | 
|  |                              "HOME", "selectFirstRow", | 
|  |                        "shift HOME", "selectFirstRowExtendSelection", | 
|  |                   "ctrl shift HOME", "selectFirstRowExtendSelection", | 
|  |                         "ctrl HOME", "selectFirstRowChangeLead", | 
|  |                               "END", "selectLastRow", | 
|  |                         "shift END", "selectLastRowExtendSelection", | 
|  |                    "ctrl shift END", "selectLastRowExtendSelection", | 
|  |                          "ctrl END", "selectLastRowChangeLead", | 
|  |                           "PAGE_UP", "scrollUp", | 
|  |                     "shift PAGE_UP", "scrollUpExtendSelection", | 
|  |                "ctrl shift PAGE_UP", "scrollUpExtendSelection", | 
|  |                      "ctrl PAGE_UP", "scrollUpChangeLead", | 
|  |                         "PAGE_DOWN", "scrollDown", | 
|  |                   "shift PAGE_DOWN", "scrollDownExtendSelection", | 
|  |              "ctrl shift PAGE_DOWN", "scrollDownExtendSelection", | 
|  |                    "ctrl PAGE_DOWN", "scrollDownChangeLead", | 
|  |                            "ctrl A", "selectAll", | 
|  |                        "ctrl SLASH", "selectAll", | 
|  |                   "ctrl BACK_SLASH", "clearSelection", | 
|  |                             "SPACE", "addToSelection", | 
|  |                        "ctrl SPACE", "toggleAndAnchor", | 
|  |                       "shift SPACE", "extendTo", | 
|  |                  "ctrl shift SPACE", "moveSelectionTo" | 
|  |                  }), | 
|  |             "List.focusInputMap.RightToLeft", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                              "LEFT", "selectNextColumn", | 
|  |                           "KP_LEFT", "selectNextColumn", | 
|  |                        "shift LEFT", "selectNextColumnExtendSelection", | 
|  |                     "shift KP_LEFT", "selectNextColumnExtendSelection", | 
|  |                   "ctrl shift LEFT", "selectNextColumnExtendSelection", | 
|  |                "ctrl shift KP_LEFT", "selectNextColumnExtendSelection", | 
|  |                         "ctrl LEFT", "selectNextColumnChangeLead", | 
|  |                      "ctrl KP_LEFT", "selectNextColumnChangeLead", | 
|  |                             "RIGHT", "selectPreviousColumn", | 
|  |                          "KP_RIGHT", "selectPreviousColumn", | 
|  |                       "shift RIGHT", "selectPreviousColumnExtendSelection", | 
|  |                    "shift KP_RIGHT", "selectPreviousColumnExtendSelection", | 
|  |                  "ctrl shift RIGHT", "selectPreviousColumnExtendSelection", | 
|  |               "ctrl shift KP_RIGHT", "selectPreviousColumnExtendSelection", | 
|  |                        "ctrl RIGHT", "selectPreviousColumnChangeLead", | 
|  |                     "ctrl KP_RIGHT", "selectPreviousColumnChangeLead", | 
|  |                  }), | 
|  |  | 
|  |              | 
|  |             "MenuBar.font", dialogPlain12, | 
|  |             "MenuBar.background", menu, | 
|  |             "MenuBar.foreground", menuText, | 
|  |             "MenuBar.shadow", controlShadow, | 
|  |             "MenuBar.highlight", controlLtHighlight, | 
|  |             "MenuBar.border", menuBarBorder, | 
|  |             "MenuBar.windowBindings", new Object[] { | 
|  |                 "F10", "takeFocus" }, | 
|  |  | 
|  |             "MenuItem.font", dialogPlain12, | 
|  |             "MenuItem.acceleratorFont", dialogPlain12, | 
|  |             "MenuItem.background", menu, | 
|  |             "MenuItem.foreground", menuText, | 
|  |             "MenuItem.selectionForeground", textHighlightText, | 
|  |             "MenuItem.selectionBackground", textHighlight, | 
|  |             "MenuItem.disabledForeground", null, | 
|  |             "MenuItem.acceleratorForeground", menuText, | 
|  |             "MenuItem.acceleratorSelectionForeground", textHighlightText, | 
|  |             "MenuItem.acceleratorDelimiter", menuItemAcceleratorDelimiter, | 
|  |             "MenuItem.border", marginBorder, | 
|  |             "MenuItem.borderPainted", Boolean.FALSE, | 
|  |             "MenuItem.margin", twoInsets, | 
|  |             "MenuItem.checkIcon", menuItemCheckIcon, | 
|  |             "MenuItem.arrowIcon", menuItemArrowIcon, | 
|  |             "MenuItem.commandSound", null, | 
|  |  | 
|  |             "RadioButtonMenuItem.font", dialogPlain12, | 
|  |             "RadioButtonMenuItem.acceleratorFont", dialogPlain12, | 
|  |             "RadioButtonMenuItem.background", menu, | 
|  |             "RadioButtonMenuItem.foreground", menuText, | 
|  |             "RadioButtonMenuItem.selectionForeground", textHighlightText, | 
|  |             "RadioButtonMenuItem.selectionBackground", textHighlight, | 
|  |             "RadioButtonMenuItem.disabledForeground", null, | 
|  |             "RadioButtonMenuItem.acceleratorForeground", menuText, | 
|  |             "RadioButtonMenuItem.acceleratorSelectionForeground", textHighlightText, | 
|  |             "RadioButtonMenuItem.border", marginBorder, | 
|  |             "RadioButtonMenuItem.borderPainted", Boolean.FALSE, | 
|  |             "RadioButtonMenuItem.margin", twoInsets, | 
|  |             "RadioButtonMenuItem.checkIcon", radioButtonMenuItemIcon, | 
|  |             "RadioButtonMenuItem.arrowIcon", menuItemArrowIcon, | 
|  |             "RadioButtonMenuItem.commandSound", null, | 
|  |  | 
|  |             "CheckBoxMenuItem.font", dialogPlain12, | 
|  |             "CheckBoxMenuItem.acceleratorFont", dialogPlain12, | 
|  |             "CheckBoxMenuItem.background", menu, | 
|  |             "CheckBoxMenuItem.foreground", menuText, | 
|  |             "CheckBoxMenuItem.selectionForeground", textHighlightText, | 
|  |             "CheckBoxMenuItem.selectionBackground", textHighlight, | 
|  |             "CheckBoxMenuItem.disabledForeground", null, | 
|  |             "CheckBoxMenuItem.acceleratorForeground", menuText, | 
|  |             "CheckBoxMenuItem.acceleratorSelectionForeground", textHighlightText, | 
|  |             "CheckBoxMenuItem.border", marginBorder, | 
|  |             "CheckBoxMenuItem.borderPainted", Boolean.FALSE, | 
|  |             "CheckBoxMenuItem.margin", twoInsets, | 
|  |             "CheckBoxMenuItem.checkIcon", checkBoxMenuItemIcon, | 
|  |             "CheckBoxMenuItem.arrowIcon", menuItemArrowIcon, | 
|  |             "CheckBoxMenuItem.commandSound", null, | 
|  |  | 
|  |             "Menu.font", dialogPlain12, | 
|  |             "Menu.acceleratorFont", dialogPlain12, | 
|  |             "Menu.background", menu, | 
|  |             "Menu.foreground", menuText, | 
|  |             "Menu.selectionForeground", textHighlightText, | 
|  |             "Menu.selectionBackground", textHighlight, | 
|  |             "Menu.disabledForeground", null, | 
|  |             "Menu.acceleratorForeground", menuText, | 
|  |             "Menu.acceleratorSelectionForeground", textHighlightText, | 
|  |             "Menu.border", marginBorder, | 
|  |             "Menu.borderPainted", Boolean.FALSE, | 
|  |             "Menu.margin", twoInsets, | 
|  |             "Menu.checkIcon", menuItemCheckIcon, | 
|  |             "Menu.arrowIcon", menuArrowIcon, | 
|  |             "Menu.menuPopupOffsetX", new Integer(0), | 
|  |             "Menu.menuPopupOffsetY", new Integer(0), | 
|  |             "Menu.submenuPopupOffsetX", new Integer(0), | 
|  |             "Menu.submenuPopupOffsetY", new Integer(0), | 
|  |             "Menu.shortcutKeys", new int[]{ | 
|  |                 SwingUtilities2.getSystemMnemonicKeyMask() | 
|  |             }, | 
|  |             "Menu.crossMenuMnemonic", Boolean.TRUE, | 
|  |             // Menu.cancelMode affects the cancel menu action behaviour; | 
|  |             // currently supports: | 
|  |             // "hideLastSubmenu" (default) | 
|  |             //     hides the last open submenu, | 
|  |             //     and move selection one step back | 
|  |             // "hideMenuTree" | 
|  |             //     resets selection and | 
|  |              | 
|  |             "Menu.cancelMode", "hideLastSubmenu", | 
|  |  | 
|  |              // Menu.preserveTopLevelSelection affects | 
|  |              // the cancel menu action behaviour | 
|  |              // if set to true then top level menu selection | 
|  |              // will be preserved when the last popup was cancelled; | 
|  |               | 
|  |              "Menu.preserveTopLevelSelection", Boolean.FALSE, | 
|  |  | 
|  |              | 
|  |             "PopupMenu.font", dialogPlain12, | 
|  |             "PopupMenu.background", menu, | 
|  |             "PopupMenu.foreground", menuText, | 
|  |             "PopupMenu.border", popupMenuBorder, | 
|  |                   | 
|  |             "PopupMenu.popupSound", null, | 
|  |             // These window InputMap bindings are used when the Menu is | 
|  |              | 
|  |             "PopupMenu.selectedWindowInputMapBindings", new Object[] { | 
|  |                   "ESCAPE", "cancel", | 
|  |                     "DOWN", "selectNext", | 
|  |                  "KP_DOWN", "selectNext", | 
|  |                       "UP", "selectPrevious", | 
|  |                    "KP_UP", "selectPrevious", | 
|  |                     "LEFT", "selectParent", | 
|  |                  "KP_LEFT", "selectParent", | 
|  |                    "RIGHT", "selectChild", | 
|  |                 "KP_RIGHT", "selectChild", | 
|  |                    "ENTER", "return", | 
|  |               "ctrl ENTER", "return", | 
|  |                    "SPACE", "return" | 
|  |             }, | 
|  |             "PopupMenu.selectedWindowInputMapBindings.RightToLeft", new Object[] { | 
|  |                     "LEFT", "selectChild", | 
|  |                  "KP_LEFT", "selectChild", | 
|  |                    "RIGHT", "selectParent", | 
|  |                 "KP_RIGHT", "selectParent", | 
|  |             }, | 
|  |             "PopupMenu.consumeEventOnClose", Boolean.FALSE, | 
|  |  | 
|  |             // *** OptionPane | 
|  |             // You can additionaly define OptionPane.messageFont which will | 
|  |             // dictate the fonts used for the message, and | 
|  |              | 
|  |             "OptionPane.font", dialogPlain12, | 
|  |             "OptionPane.background", control, | 
|  |             "OptionPane.foreground", controlText, | 
|  |             "OptionPane.messageForeground", controlText, | 
|  |             "OptionPane.border", optionPaneBorder, | 
|  |             "OptionPane.messageAreaBorder", zeroBorder, | 
|  |             "OptionPane.buttonAreaBorder", optionPaneButtonAreaBorder, | 
|  |             "OptionPane.minimumSize", optionPaneMinimumSize, | 
|  |             "OptionPane.errorIcon", SwingUtilities2.makeIcon(getClass(), | 
|  |                                                              BasicLookAndFeel.class, | 
|  |                                                              "icons/Error.gif"), | 
|  |             "OptionPane.informationIcon", SwingUtilities2.makeIcon(getClass(), | 
|  |                                                                    BasicLookAndFeel.class, | 
|  |                                                                    "icons/Inform.gif"), | 
|  |             "OptionPane.warningIcon", SwingUtilities2.makeIcon(getClass(), | 
|  |                                                                BasicLookAndFeel.class, | 
|  |                                                                "icons/Warn.gif"), | 
|  |             "OptionPane.questionIcon", SwingUtilities2.makeIcon(getClass(), | 
|  |                                                                 BasicLookAndFeel.class, | 
|  |                                                                 "icons/Question.gif"), | 
|  |             "OptionPane.windowBindings", new Object[] { | 
|  |                 "ESCAPE", "close" }, | 
|  |                   | 
|  |             "OptionPane.errorSound", null, | 
|  |             "OptionPane.informationSound", null,  | 
|  |             "OptionPane.questionSound", null, | 
|  |             "OptionPane.warningSound", null, | 
|  |             "OptionPane.buttonClickThreshhold", fiveHundred, | 
|  |  | 
|  |              | 
|  |             "Panel.font", dialogPlain12, | 
|  |             "Panel.background", control, | 
|  |             "Panel.foreground", textText, | 
|  |  | 
|  |              | 
|  |             "ProgressBar.font", dialogPlain12, | 
|  |             "ProgressBar.foreground",  textHighlight, | 
|  |             "ProgressBar.background", control, | 
|  |             "ProgressBar.selectionForeground", control, | 
|  |             "ProgressBar.selectionBackground", textHighlight, | 
|  |             "ProgressBar.border", progressBarBorder, | 
|  |             "ProgressBar.cellLength", new Integer(1), | 
|  |             "ProgressBar.cellSpacing", zero, | 
|  |             "ProgressBar.repaintInterval", new Integer(50), | 
|  |             "ProgressBar.cycleTime", new Integer(3000), | 
|  |             "ProgressBar.horizontalSize", new DimensionUIResource(146, 12), | 
|  |             "ProgressBar.verticalSize", new DimensionUIResource(12, 146), | 
|  |  | 
|  |            // *** Separator | 
|  |             "Separator.shadow", controlShadow,           | 
|  |             "Separator.highlight", controlLtHighlight,   | 
|  |  | 
|  |             "Separator.background", controlLtHighlight, | 
|  |             "Separator.foreground", controlShadow, | 
|  |  | 
|  |              | 
|  |             "ScrollBar.background", scrollBarTrack, | 
|  |             "ScrollBar.foreground", control, | 
|  |             "ScrollBar.track", table.get("scrollbar"), | 
|  |             "ScrollBar.trackHighlight", controlDkShadow, | 
|  |             "ScrollBar.thumb", control, | 
|  |             "ScrollBar.thumbHighlight", controlLtHighlight, | 
|  |             "ScrollBar.thumbDarkShadow", controlDkShadow, | 
|  |             "ScrollBar.thumbShadow", controlShadow, | 
|  |             "ScrollBar.border", null, | 
|  |             "ScrollBar.minimumThumbSize", minimumThumbSize, | 
|  |             "ScrollBar.maximumThumbSize", maximumThumbSize, | 
|  |             "ScrollBar.ancestorInputMap", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                        "RIGHT", "positiveUnitIncrement", | 
|  |                     "KP_RIGHT", "positiveUnitIncrement", | 
|  |                         "DOWN", "positiveUnitIncrement", | 
|  |                      "KP_DOWN", "positiveUnitIncrement", | 
|  |                    "PAGE_DOWN", "positiveBlockIncrement", | 
|  |                         "LEFT", "negativeUnitIncrement", | 
|  |                      "KP_LEFT", "negativeUnitIncrement", | 
|  |                           "UP", "negativeUnitIncrement", | 
|  |                        "KP_UP", "negativeUnitIncrement", | 
|  |                      "PAGE_UP", "negativeBlockIncrement", | 
|  |                         "HOME", "minScroll", | 
|  |                          "END", "maxScroll" | 
|  |                  }), | 
|  |             "ScrollBar.ancestorInputMap.RightToLeft", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                        "RIGHT", "negativeUnitIncrement", | 
|  |                     "KP_RIGHT", "negativeUnitIncrement", | 
|  |                         "LEFT", "positiveUnitIncrement", | 
|  |                      "KP_LEFT", "positiveUnitIncrement", | 
|  |                  }), | 
|  |             "ScrollBar.width", new Integer(16), | 
|  |  | 
|  |             "ScrollPane.font", dialogPlain12, | 
|  |             "ScrollPane.background", control, | 
|  |             "ScrollPane.foreground", controlText, | 
|  |             "ScrollPane.border", textFieldBorder, | 
|  |             "ScrollPane.viewportBorder", null, | 
|  |             "ScrollPane.ancestorInputMap", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                            "RIGHT", "unitScrollRight", | 
|  |                         "KP_RIGHT", "unitScrollRight", | 
|  |                             "DOWN", "unitScrollDown", | 
|  |                          "KP_DOWN", "unitScrollDown", | 
|  |                             "LEFT", "unitScrollLeft", | 
|  |                          "KP_LEFT", "unitScrollLeft", | 
|  |                               "UP", "unitScrollUp", | 
|  |                            "KP_UP", "unitScrollUp", | 
|  |                          "PAGE_UP", "scrollUp", | 
|  |                        "PAGE_DOWN", "scrollDown", | 
|  |                     "ctrl PAGE_UP", "scrollLeft", | 
|  |                   "ctrl PAGE_DOWN", "scrollRight", | 
|  |                        "ctrl HOME", "scrollHome", | 
|  |                         "ctrl END", "scrollEnd" | 
|  |                  }), | 
|  |             "ScrollPane.ancestorInputMap.RightToLeft", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                     "ctrl PAGE_UP", "scrollRight", | 
|  |                   "ctrl PAGE_DOWN", "scrollLeft", | 
|  |                  }), | 
|  |  | 
|  |             "Viewport.font", dialogPlain12, | 
|  |             "Viewport.background", control, | 
|  |             "Viewport.foreground", textText, | 
|  |  | 
|  |              | 
|  |             "Slider.font", dialogPlain12, | 
|  |             "Slider.foreground", control, | 
|  |             "Slider.background", control, | 
|  |             "Slider.highlight", controlLtHighlight, | 
|  |             "Slider.tickColor", Color.black, | 
|  |             "Slider.shadow", controlShadow, | 
|  |             "Slider.focus", controlDkShadow, | 
|  |             "Slider.border", null, | 
|  |             "Slider.horizontalSize", new Dimension(200, 21), | 
|  |             "Slider.verticalSize", new Dimension(21, 200), | 
|  |             "Slider.minimumHorizontalSize", new Dimension(36, 21), | 
|  |             "Slider.minimumVerticalSize", new Dimension(21, 36), | 
|  |             "Slider.focusInsets", sliderFocusInsets, | 
|  |             "Slider.focusInputMap", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                        "RIGHT", "positiveUnitIncrement", | 
|  |                     "KP_RIGHT", "positiveUnitIncrement", | 
|  |                         "DOWN", "negativeUnitIncrement", | 
|  |                      "KP_DOWN", "negativeUnitIncrement", | 
|  |                    "PAGE_DOWN", "negativeBlockIncrement", | 
|  |                         "LEFT", "negativeUnitIncrement", | 
|  |                      "KP_LEFT", "negativeUnitIncrement", | 
|  |                           "UP", "positiveUnitIncrement", | 
|  |                        "KP_UP", "positiveUnitIncrement", | 
|  |                      "PAGE_UP", "positiveBlockIncrement", | 
|  |                         "HOME", "minScroll", | 
|  |                          "END", "maxScroll" | 
|  |                  }), | 
|  |             "Slider.focusInputMap.RightToLeft", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                        "RIGHT", "negativeUnitIncrement", | 
|  |                     "KP_RIGHT", "negativeUnitIncrement", | 
|  |                         "LEFT", "positiveUnitIncrement", | 
|  |                      "KP_LEFT", "positiveUnitIncrement", | 
|  |                  }), | 
|  |             "Slider.onlyLeftMouseButtonDrag", Boolean.TRUE, | 
|  |  | 
|  |              | 
|  |             "Spinner.font", monospacedPlain12, | 
|  |             "Spinner.background", control, | 
|  |             "Spinner.foreground", control, | 
|  |             "Spinner.border", textFieldBorder, | 
|  |             "Spinner.arrowButtonBorder", null, | 
|  |             "Spinner.arrowButtonInsets", null, | 
|  |             "Spinner.arrowButtonSize", new Dimension(16, 5), | 
|  |             "Spinner.ancestorInputMap", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                                "UP", "increment", | 
|  |                             "KP_UP", "increment", | 
|  |                              "DOWN", "decrement", | 
|  |                           "KP_DOWN", "decrement", | 
|  |                }), | 
|  |             "Spinner.editorBorderPainted", Boolean.FALSE, | 
|  |             "Spinner.editorAlignment", JTextField.TRAILING, | 
|  |  | 
|  |              | 
|  |             "SplitPane.background", control, | 
|  |             "SplitPane.highlight", controlLtHighlight, | 
|  |             "SplitPane.shadow", controlShadow, | 
|  |             "SplitPane.darkShadow", controlDkShadow, | 
|  |             "SplitPane.border", splitPaneBorder, | 
|  |             "SplitPane.dividerSize", new Integer(7), | 
|  |             "SplitPaneDivider.border", splitPaneDividerBorder, | 
|  |             "SplitPaneDivider.draggingColor", darkGray, | 
|  |             "SplitPane.ancestorInputMap", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                         "UP", "negativeIncrement", | 
|  |                       "DOWN", "positiveIncrement", | 
|  |                       "LEFT", "negativeIncrement", | 
|  |                      "RIGHT", "positiveIncrement", | 
|  |                      "KP_UP", "negativeIncrement", | 
|  |                    "KP_DOWN", "positiveIncrement", | 
|  |                    "KP_LEFT", "negativeIncrement", | 
|  |                   "KP_RIGHT", "positiveIncrement", | 
|  |                       "HOME", "selectMin", | 
|  |                        "END", "selectMax", | 
|  |                         "F8", "startResize", | 
|  |                         "F6", "toggleFocus", | 
|  |                   "ctrl TAB", "focusOutForward", | 
|  |             "ctrl shift TAB", "focusOutBackward" | 
|  |                  }), | 
|  |  | 
|  |              | 
|  |             "TabbedPane.font", dialogPlain12, | 
|  |             "TabbedPane.background", control, | 
|  |             "TabbedPane.foreground", controlText, | 
|  |             "TabbedPane.highlight", controlLtHighlight, | 
|  |             "TabbedPane.light", controlHighlight, | 
|  |             "TabbedPane.shadow", controlShadow, | 
|  |             "TabbedPane.darkShadow", controlDkShadow, | 
|  |             "TabbedPane.selected", null, | 
|  |             "TabbedPane.focus", controlText, | 
|  |             "TabbedPane.textIconGap", four, | 
|  |  | 
|  |             // Causes tabs to be painted on top of the content area border. | 
|  |             // The amount of overlap is then controlled by tabAreaInsets.bottom, | 
|  |              | 
|  |             "TabbedPane.tabsOverlapBorder", Boolean.FALSE, | 
|  |             "TabbedPane.selectionFollowsFocus", Boolean.TRUE, | 
|  |  | 
|  |             "TabbedPane.labelShift", 1, | 
|  |             "TabbedPane.selectedLabelShift", -1, | 
|  |             "TabbedPane.tabInsets", tabbedPaneTabInsets, | 
|  |             "TabbedPane.selectedTabPadInsets", tabbedPaneTabPadInsets, | 
|  |             "TabbedPane.tabAreaInsets", tabbedPaneTabAreaInsets, | 
|  |             "TabbedPane.contentBorderInsets", tabbedPaneContentBorderInsets, | 
|  |             "TabbedPane.tabRunOverlay", new Integer(2), | 
|  |             "TabbedPane.tabsOpaque", Boolean.TRUE, | 
|  |             "TabbedPane.contentOpaque", Boolean.TRUE, | 
|  |             "TabbedPane.focusInputMap", | 
|  |               new UIDefaults.LazyInputMap(new Object[] { | 
|  |                          "RIGHT", "navigateRight", | 
|  |                       "KP_RIGHT", "navigateRight", | 
|  |                           "LEFT", "navigateLeft", | 
|  |                        "KP_LEFT", "navigateLeft", | 
|  |                             "UP", "navigateUp", | 
|  |                          "KP_UP", "navigateUp", | 
|  |                           "DOWN", "navigateDown", | 
|  |                        "KP_DOWN", "navigateDown", | 
|  |                      "ctrl DOWN", "requestFocusForVisibleComponent", | 
|  |                   "ctrl KP_DOWN", "requestFocusForVisibleComponent", | 
|  |                 }), | 
|  |             "TabbedPane.ancestorInputMap", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                    "ctrl PAGE_DOWN", "navigatePageDown", | 
|  |                      "ctrl PAGE_UP", "navigatePageUp", | 
|  |                           "ctrl UP", "requestFocus", | 
|  |                        "ctrl KP_UP", "requestFocus", | 
|  |                  }), | 
|  |  | 
|  |  | 
|  |              | 
|  |             "Table.font", dialogPlain12, | 
|  |             "Table.foreground", controlText,   | 
|  |             "Table.background", window,   | 
|  |             "Table.selectionForeground", textHighlightText, | 
|  |             "Table.selectionBackground", textHighlight, | 
|  |             "Table.dropLineColor", controlShadow, | 
|  |             "Table.dropLineShortColor", black, | 
|  |             "Table.gridColor", gray,   | 
|  |             "Table.focusCellBackground", window, | 
|  |             "Table.focusCellForeground", controlText, | 
|  |             "Table.focusCellHighlightBorder", focusCellHighlightBorder, | 
|  |             "Table.scrollPaneBorder", loweredBevelBorder, | 
|  |             "Table.ancestorInputMap", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                                "ctrl C", "copy", | 
|  |                                "ctrl V", "paste", | 
|  |                                "ctrl X", "cut", | 
|  |                                  "COPY", "copy", | 
|  |                                 "PASTE", "paste", | 
|  |                                   "CUT", "cut", | 
|  |                        "control INSERT", "copy", | 
|  |                          "shift INSERT", "paste", | 
|  |                          "shift DELETE", "cut", | 
|  |                                 "RIGHT", "selectNextColumn", | 
|  |                              "KP_RIGHT", "selectNextColumn", | 
|  |                           "shift RIGHT", "selectNextColumnExtendSelection", | 
|  |                        "shift KP_RIGHT", "selectNextColumnExtendSelection", | 
|  |                      "ctrl shift RIGHT", "selectNextColumnExtendSelection", | 
|  |                   "ctrl shift KP_RIGHT", "selectNextColumnExtendSelection", | 
|  |                            "ctrl RIGHT", "selectNextColumnChangeLead", | 
|  |                         "ctrl KP_RIGHT", "selectNextColumnChangeLead", | 
|  |                                  "LEFT", "selectPreviousColumn", | 
|  |                               "KP_LEFT", "selectPreviousColumn", | 
|  |                            "shift LEFT", "selectPreviousColumnExtendSelection", | 
|  |                         "shift KP_LEFT", "selectPreviousColumnExtendSelection", | 
|  |                       "ctrl shift LEFT", "selectPreviousColumnExtendSelection", | 
|  |                    "ctrl shift KP_LEFT", "selectPreviousColumnExtendSelection", | 
|  |                             "ctrl LEFT", "selectPreviousColumnChangeLead", | 
|  |                          "ctrl KP_LEFT", "selectPreviousColumnChangeLead", | 
|  |                                  "DOWN", "selectNextRow", | 
|  |                               "KP_DOWN", "selectNextRow", | 
|  |                            "shift DOWN", "selectNextRowExtendSelection", | 
|  |                         "shift KP_DOWN", "selectNextRowExtendSelection", | 
|  |                       "ctrl shift DOWN", "selectNextRowExtendSelection", | 
|  |                    "ctrl shift KP_DOWN", "selectNextRowExtendSelection", | 
|  |                             "ctrl DOWN", "selectNextRowChangeLead", | 
|  |                          "ctrl KP_DOWN", "selectNextRowChangeLead", | 
|  |                                    "UP", "selectPreviousRow", | 
|  |                                 "KP_UP", "selectPreviousRow", | 
|  |                              "shift UP", "selectPreviousRowExtendSelection", | 
|  |                           "shift KP_UP", "selectPreviousRowExtendSelection", | 
|  |                         "ctrl shift UP", "selectPreviousRowExtendSelection", | 
|  |                      "ctrl shift KP_UP", "selectPreviousRowExtendSelection", | 
|  |                               "ctrl UP", "selectPreviousRowChangeLead", | 
|  |                            "ctrl KP_UP", "selectPreviousRowChangeLead", | 
|  |                                  "HOME", "selectFirstColumn", | 
|  |                            "shift HOME", "selectFirstColumnExtendSelection", | 
|  |                       "ctrl shift HOME", "selectFirstRowExtendSelection", | 
|  |                             "ctrl HOME", "selectFirstRow", | 
|  |                                   "END", "selectLastColumn", | 
|  |                             "shift END", "selectLastColumnExtendSelection", | 
|  |                        "ctrl shift END", "selectLastRowExtendSelection", | 
|  |                              "ctrl END", "selectLastRow", | 
|  |                               "PAGE_UP", "scrollUpChangeSelection", | 
|  |                         "shift PAGE_UP", "scrollUpExtendSelection", | 
|  |                    "ctrl shift PAGE_UP", "scrollLeftExtendSelection", | 
|  |                          "ctrl PAGE_UP", "scrollLeftChangeSelection", | 
|  |                             "PAGE_DOWN", "scrollDownChangeSelection", | 
|  |                       "shift PAGE_DOWN", "scrollDownExtendSelection", | 
|  |                  "ctrl shift PAGE_DOWN", "scrollRightExtendSelection", | 
|  |                        "ctrl PAGE_DOWN", "scrollRightChangeSelection", | 
|  |                                   "TAB", "selectNextColumnCell", | 
|  |                             "shift TAB", "selectPreviousColumnCell", | 
|  |                                 "ENTER", "selectNextRowCell", | 
|  |                           "shift ENTER", "selectPreviousRowCell", | 
|  |                                "ctrl A", "selectAll", | 
|  |                            "ctrl SLASH", "selectAll", | 
|  |                       "ctrl BACK_SLASH", "clearSelection", | 
|  |                                "ESCAPE", "cancel", | 
|  |                                    "F2", "startEditing", | 
|  |                                 "SPACE", "addToSelection", | 
|  |                            "ctrl SPACE", "toggleAndAnchor", | 
|  |                           "shift SPACE", "extendTo", | 
|  |                      "ctrl shift SPACE", "moveSelectionTo", | 
|  |                                    "F8", "focusHeader" | 
|  |                  }), | 
|  |             "Table.ancestorInputMap.RightToLeft", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                                 "RIGHT", "selectPreviousColumn", | 
|  |                              "KP_RIGHT", "selectPreviousColumn", | 
|  |                           "shift RIGHT", "selectPreviousColumnExtendSelection", | 
|  |                        "shift KP_RIGHT", "selectPreviousColumnExtendSelection", | 
|  |                      "ctrl shift RIGHT", "selectPreviousColumnExtendSelection", | 
|  |                   "ctrl shift KP_RIGHT", "selectPreviousColumnExtendSelection", | 
|  |                            "ctrl RIGHT", "selectPreviousColumnChangeLead", | 
|  |                         "ctrl KP_RIGHT", "selectPreviousColumnChangeLead", | 
|  |                                  "LEFT", "selectNextColumn", | 
|  |                               "KP_LEFT", "selectNextColumn", | 
|  |                            "shift LEFT", "selectNextColumnExtendSelection", | 
|  |                         "shift KP_LEFT", "selectNextColumnExtendSelection", | 
|  |                       "ctrl shift LEFT", "selectNextColumnExtendSelection", | 
|  |                    "ctrl shift KP_LEFT", "selectNextColumnExtendSelection", | 
|  |                             "ctrl LEFT", "selectNextColumnChangeLead", | 
|  |                          "ctrl KP_LEFT", "selectNextColumnChangeLead", | 
|  |                          "ctrl PAGE_UP", "scrollRightChangeSelection", | 
|  |                        "ctrl PAGE_DOWN", "scrollLeftChangeSelection", | 
|  |                    "ctrl shift PAGE_UP", "scrollRightExtendSelection", | 
|  |                  "ctrl shift PAGE_DOWN", "scrollLeftExtendSelection", | 
|  |                  }), | 
|  |             "Table.ascendingSortIcon",  new SwingLazyValue( | 
|  |                      "sun.swing.icon.SortArrowIcon", | 
|  |                      null, new Object[] { Boolean.TRUE, | 
|  |                                           "Table.sortIconColor" }), | 
|  |             "Table.descendingSortIcon",  new SwingLazyValue( | 
|  |                      "sun.swing.icon.SortArrowIcon", | 
|  |                      null, new Object[] { Boolean.FALSE, | 
|  |                                           "Table.sortIconColor" }), | 
|  |             "Table.sortIconColor", controlShadow, | 
|  |  | 
|  |             "TableHeader.font", dialogPlain12, | 
|  |             "TableHeader.foreground", controlText,  | 
|  |             "TableHeader.background", control,  | 
|  |             "TableHeader.cellBorder", tableHeaderBorder, | 
|  |  | 
|  |             // Support for changing the background/border of the currently | 
|  |             // selected header column when the header has the keyboard focus. | 
|  |             "TableHeader.focusCellBackground", table.getColor("text"),  | 
|  |             "TableHeader.focusCellForeground", null, | 
|  |             "TableHeader.focusCellBorder", null, | 
|  |             "TableHeader.ancestorInputMap", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                                 "SPACE", "toggleSortOrder", | 
|  |                                  "LEFT", "selectColumnToLeft", | 
|  |                               "KP_LEFT", "selectColumnToLeft", | 
|  |                                 "RIGHT", "selectColumnToRight", | 
|  |                              "KP_RIGHT", "selectColumnToRight", | 
|  |                              "alt LEFT", "moveColumnLeft", | 
|  |                           "alt KP_LEFT", "moveColumnLeft", | 
|  |                             "alt RIGHT", "moveColumnRight", | 
|  |                          "alt KP_RIGHT", "moveColumnRight", | 
|  |                        "alt shift LEFT", "resizeLeft", | 
|  |                     "alt shift KP_LEFT", "resizeLeft", | 
|  |                       "alt shift RIGHT", "resizeRight", | 
|  |                    "alt shift KP_RIGHT", "resizeRight", | 
|  |                                "ESCAPE", "focusTable", | 
|  |                }), | 
|  |  | 
|  |              | 
|  |             "TextField.font", sansSerifPlain12, | 
|  |             "TextField.background", window, | 
|  |             "TextField.foreground", textText, | 
|  |             "TextField.shadow", controlShadow, | 
|  |             "TextField.darkShadow", controlDkShadow, | 
|  |             "TextField.light", controlHighlight, | 
|  |             "TextField.highlight", controlLtHighlight, | 
|  |             "TextField.inactiveForeground", textInactiveText, | 
|  |             "TextField.inactiveBackground", control, | 
|  |             "TextField.selectionBackground", textHighlight, | 
|  |             "TextField.selectionForeground", textHighlightText, | 
|  |             "TextField.caretForeground", textText, | 
|  |             "TextField.caretBlinkRate", caretBlinkRate, | 
|  |             "TextField.border", textFieldBorder, | 
|  |             "TextField.margin", zeroInsets, | 
|  |  | 
|  |             "FormattedTextField.font", sansSerifPlain12, | 
|  |             "FormattedTextField.background", window, | 
|  |             "FormattedTextField.foreground", textText, | 
|  |             "FormattedTextField.inactiveForeground", textInactiveText, | 
|  |             "FormattedTextField.inactiveBackground", control, | 
|  |             "FormattedTextField.selectionBackground", textHighlight, | 
|  |             "FormattedTextField.selectionForeground", textHighlightText, | 
|  |             "FormattedTextField.caretForeground", textText, | 
|  |             "FormattedTextField.caretBlinkRate", caretBlinkRate, | 
|  |             "FormattedTextField.border", textFieldBorder, | 
|  |             "FormattedTextField.margin", zeroInsets, | 
|  |             "FormattedTextField.focusInputMap", | 
|  |               new UIDefaults.LazyInputMap(new Object[] { | 
|  |                            "ctrl C", DefaultEditorKit.copyAction, | 
|  |                            "ctrl V", DefaultEditorKit.pasteAction, | 
|  |                            "ctrl X", DefaultEditorKit.cutAction, | 
|  |                              "COPY", DefaultEditorKit.copyAction, | 
|  |                             "PASTE", DefaultEditorKit.pasteAction, | 
|  |                               "CUT", DefaultEditorKit.cutAction, | 
|  |                    "control INSERT", DefaultEditorKit.copyAction, | 
|  |                      "shift INSERT", DefaultEditorKit.pasteAction, | 
|  |                      "shift DELETE", DefaultEditorKit.cutAction, | 
|  |                        "shift LEFT", DefaultEditorKit.selectionBackwardAction, | 
|  |                     "shift KP_LEFT", DefaultEditorKit.selectionBackwardAction, | 
|  |                       "shift RIGHT", DefaultEditorKit.selectionForwardAction, | 
|  |                    "shift KP_RIGHT", DefaultEditorKit.selectionForwardAction, | 
|  |                         "ctrl LEFT", DefaultEditorKit.previousWordAction, | 
|  |                      "ctrl KP_LEFT", DefaultEditorKit.previousWordAction, | 
|  |                        "ctrl RIGHT", DefaultEditorKit.nextWordAction, | 
|  |                     "ctrl KP_RIGHT", DefaultEditorKit.nextWordAction, | 
|  |                   "ctrl shift LEFT", DefaultEditorKit.selectionPreviousWordAction, | 
|  |                "ctrl shift KP_LEFT", DefaultEditorKit.selectionPreviousWordAction, | 
|  |                  "ctrl shift RIGHT", DefaultEditorKit.selectionNextWordAction, | 
|  |               "ctrl shift KP_RIGHT", DefaultEditorKit.selectionNextWordAction, | 
|  |                            "ctrl A", DefaultEditorKit.selectAllAction, | 
|  |                              "HOME", DefaultEditorKit.beginLineAction, | 
|  |                               "END", DefaultEditorKit.endLineAction, | 
|  |                        "shift HOME", DefaultEditorKit.selectionBeginLineAction, | 
|  |                         "shift END", DefaultEditorKit.selectionEndLineAction, | 
|  |                        "BACK_SPACE", DefaultEditorKit.deletePrevCharAction, | 
|  |                  "shift BACK_SPACE", DefaultEditorKit.deletePrevCharAction, | 
|  |                            "ctrl H", DefaultEditorKit.deletePrevCharAction, | 
|  |                            "DELETE", DefaultEditorKit.deleteNextCharAction, | 
|  |                       "ctrl DELETE", DefaultEditorKit.deleteNextWordAction, | 
|  |                   "ctrl BACK_SPACE", DefaultEditorKit.deletePrevWordAction, | 
|  |                             "RIGHT", DefaultEditorKit.forwardAction, | 
|  |                              "LEFT", DefaultEditorKit.backwardAction, | 
|  |                          "KP_RIGHT", DefaultEditorKit.forwardAction, | 
|  |                           "KP_LEFT", DefaultEditorKit.backwardAction, | 
|  |                             "ENTER", JTextField.notifyAction, | 
|  |                   "ctrl BACK_SLASH", "unselect", | 
|  |                   "control shift O", "toggle-componentOrientation", | 
|  |                            "ESCAPE", "reset-field-edit", | 
|  |                                "UP", "increment", | 
|  |                             "KP_UP", "increment", | 
|  |                              "DOWN", "decrement", | 
|  |                           "KP_DOWN", "decrement", | 
|  |               }), | 
|  |  | 
|  |             "PasswordField.font", monospacedPlain12, | 
|  |             "PasswordField.background", window, | 
|  |             "PasswordField.foreground", textText, | 
|  |             "PasswordField.inactiveForeground", textInactiveText, | 
|  |             "PasswordField.inactiveBackground", control, | 
|  |             "PasswordField.selectionBackground", textHighlight, | 
|  |             "PasswordField.selectionForeground", textHighlightText, | 
|  |             "PasswordField.caretForeground", textText, | 
|  |             "PasswordField.caretBlinkRate", caretBlinkRate, | 
|  |             "PasswordField.border", textFieldBorder, | 
|  |             "PasswordField.margin", zeroInsets, | 
|  |             "PasswordField.echoChar", '*', | 
|  |  | 
|  |             "TextArea.font", monospacedPlain12, | 
|  |             "TextArea.background", window, | 
|  |             "TextArea.foreground", textText, | 
|  |             "TextArea.inactiveForeground", textInactiveText, | 
|  |             "TextArea.selectionBackground", textHighlight, | 
|  |             "TextArea.selectionForeground", textHighlightText, | 
|  |             "TextArea.caretForeground", textText, | 
|  |             "TextArea.caretBlinkRate", caretBlinkRate, | 
|  |             "TextArea.border", marginBorder, | 
|  |             "TextArea.margin", zeroInsets, | 
|  |  | 
|  |             "TextPane.font", serifPlain12, | 
|  |             "TextPane.background", white, | 
|  |             "TextPane.foreground", textText, | 
|  |             "TextPane.selectionBackground", textHighlight, | 
|  |             "TextPane.selectionForeground", textHighlightText, | 
|  |             "TextPane.caretForeground", textText, | 
|  |             "TextPane.caretBlinkRate", caretBlinkRate, | 
|  |             "TextPane.inactiveForeground", textInactiveText, | 
|  |             "TextPane.border", marginBorder, | 
|  |             "TextPane.margin", editorMargin, | 
|  |  | 
|  |             "EditorPane.font", serifPlain12, | 
|  |             "EditorPane.background", white, | 
|  |             "EditorPane.foreground", textText, | 
|  |             "EditorPane.selectionBackground", textHighlight, | 
|  |             "EditorPane.selectionForeground", textHighlightText, | 
|  |             "EditorPane.caretForeground", textText, | 
|  |             "EditorPane.caretBlinkRate", caretBlinkRate, | 
|  |             "EditorPane.inactiveForeground", textInactiveText, | 
|  |             "EditorPane.border", marginBorder, | 
|  |             "EditorPane.margin", editorMargin, | 
|  |  | 
|  |             "html.pendingImage", SwingUtilities2.makeIcon(getClass(), | 
|  |                                     BasicLookAndFeel.class, | 
|  |                                     "icons/image-delayed.png"), | 
|  |             "html.missingImage", SwingUtilities2.makeIcon(getClass(), | 
|  |                                     BasicLookAndFeel.class, | 
|  |                                     "icons/image-failed.png"), | 
|  |              | 
|  |             "TitledBorder.font", dialogPlain12, | 
|  |             "TitledBorder.titleColor", controlText, | 
|  |             "TitledBorder.border", etchedBorder, | 
|  |  | 
|  |              | 
|  |             "ToolBar.font", dialogPlain12, | 
|  |             "ToolBar.background", control, | 
|  |             "ToolBar.foreground", controlText, | 
|  |             "ToolBar.shadow", controlShadow, | 
|  |             "ToolBar.darkShadow", controlDkShadow, | 
|  |             "ToolBar.light", controlHighlight, | 
|  |             "ToolBar.highlight", controlLtHighlight, | 
|  |             "ToolBar.dockingBackground", control, | 
|  |             "ToolBar.dockingForeground", red, | 
|  |             "ToolBar.floatingBackground", control, | 
|  |             "ToolBar.floatingForeground", darkGray, | 
|  |             "ToolBar.border", etchedBorder, | 
|  |             "ToolBar.separatorSize", toolBarSeparatorSize, | 
|  |             "ToolBar.ancestorInputMap", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                         "UP", "navigateUp", | 
|  |                      "KP_UP", "navigateUp", | 
|  |                       "DOWN", "navigateDown", | 
|  |                    "KP_DOWN", "navigateDown", | 
|  |                       "LEFT", "navigateLeft", | 
|  |                    "KP_LEFT", "navigateLeft", | 
|  |                      "RIGHT", "navigateRight", | 
|  |                   "KP_RIGHT", "navigateRight" | 
|  |                  }), | 
|  |  | 
|  |              | 
|  |             "ToolTip.font", sansSerifPlain12, | 
|  |             "ToolTip.background", table.get("info"), | 
|  |             "ToolTip.foreground", table.get("infoText"), | 
|  |             "ToolTip.border", blackLineBorder, | 
|  |             // ToolTips also support backgroundInactive, borderInactive, | 
|  |             // and foregroundInactive | 
|  |  | 
|  |         // *** ToolTipManager | 
|  |             // ToolTipManager.enableToolTipMode currently supports: | 
|  |             // "allWindows" (default): | 
|  |             //     enables tool tips for all windows of all java applications, | 
|  |             //     whether the windows are active or inactive | 
|  |             // "activeApplication" | 
|  |             //     enables tool tips for windows of an application only when | 
|  |              | 
|  |             "ToolTipManager.enableToolTipMode", "allWindows", | 
|  |  | 
|  |          | 
|  |             "Tree.paintLines", Boolean.TRUE, | 
|  |             "Tree.lineTypeDashed", Boolean.FALSE, | 
|  |             "Tree.font", dialogPlain12, | 
|  |             "Tree.background", window, | 
|  |             "Tree.foreground", textText, | 
|  |             "Tree.hash", gray, | 
|  |             "Tree.textForeground", textText, | 
|  |             "Tree.textBackground", table.get("text"), | 
|  |             "Tree.selectionForeground", textHighlightText, | 
|  |             "Tree.selectionBackground", textHighlight, | 
|  |             "Tree.selectionBorderColor", black, | 
|  |             "Tree.dropLineColor", controlShadow, | 
|  |             "Tree.editorBorder", blackLineBorder, | 
|  |             "Tree.leftChildIndent", new Integer(7), | 
|  |             "Tree.rightChildIndent", new Integer(13), | 
|  |             "Tree.rowHeight", new Integer(16), | 
|  |             "Tree.scrollsOnExpand", Boolean.TRUE, | 
|  |             "Tree.openIcon", SwingUtilities2.makeIcon(getClass(), | 
|  |                                                       BasicLookAndFeel.class, | 
|  |                                                       "icons/TreeOpen.gif"), | 
|  |             "Tree.closedIcon", SwingUtilities2.makeIcon(getClass(), | 
|  |                                                         BasicLookAndFeel.class, | 
|  |                                                         "icons/TreeClosed.gif"), | 
|  |             "Tree.leafIcon", SwingUtilities2.makeIcon(getClass(), | 
|  |                                                       BasicLookAndFeel.class, | 
|  |                                                       "icons/TreeLeaf.gif"), | 
|  |             "Tree.expandedIcon", null, | 
|  |             "Tree.collapsedIcon", null, | 
|  |             "Tree.changeSelectionWithFocus", Boolean.TRUE, | 
|  |             "Tree.drawsFocusBorderAroundIcon", Boolean.FALSE, | 
|  |             "Tree.timeFactor", oneThousand, | 
|  |             "Tree.focusInputMap", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                                  "ctrl C", "copy", | 
|  |                                  "ctrl V", "paste", | 
|  |                                  "ctrl X", "cut", | 
|  |                                    "COPY", "copy", | 
|  |                                   "PASTE", "paste", | 
|  |                                     "CUT", "cut", | 
|  |                          "control INSERT", "copy", | 
|  |                            "shift INSERT", "paste", | 
|  |                            "shift DELETE", "cut", | 
|  |                                      "UP", "selectPrevious", | 
|  |                                   "KP_UP", "selectPrevious", | 
|  |                                "shift UP", "selectPreviousExtendSelection", | 
|  |                             "shift KP_UP", "selectPreviousExtendSelection", | 
|  |                           "ctrl shift UP", "selectPreviousExtendSelection", | 
|  |                        "ctrl shift KP_UP", "selectPreviousExtendSelection", | 
|  |                                 "ctrl UP", "selectPreviousChangeLead", | 
|  |                              "ctrl KP_UP", "selectPreviousChangeLead", | 
|  |                                    "DOWN", "selectNext", | 
|  |                                 "KP_DOWN", "selectNext", | 
|  |                              "shift DOWN", "selectNextExtendSelection", | 
|  |                           "shift KP_DOWN", "selectNextExtendSelection", | 
|  |                         "ctrl shift DOWN", "selectNextExtendSelection", | 
|  |                      "ctrl shift KP_DOWN", "selectNextExtendSelection", | 
|  |                               "ctrl DOWN", "selectNextChangeLead", | 
|  |                            "ctrl KP_DOWN", "selectNextChangeLead", | 
|  |                                   "RIGHT", "selectChild", | 
|  |                                "KP_RIGHT", "selectChild", | 
|  |                                    "LEFT", "selectParent", | 
|  |                                 "KP_LEFT", "selectParent", | 
|  |                                 "PAGE_UP", "scrollUpChangeSelection", | 
|  |                           "shift PAGE_UP", "scrollUpExtendSelection", | 
|  |                      "ctrl shift PAGE_UP", "scrollUpExtendSelection", | 
|  |                            "ctrl PAGE_UP", "scrollUpChangeLead", | 
|  |                               "PAGE_DOWN", "scrollDownChangeSelection", | 
|  |                         "shift PAGE_DOWN", "scrollDownExtendSelection", | 
|  |                    "ctrl shift PAGE_DOWN", "scrollDownExtendSelection", | 
|  |                          "ctrl PAGE_DOWN", "scrollDownChangeLead", | 
|  |                                    "HOME", "selectFirst", | 
|  |                              "shift HOME", "selectFirstExtendSelection", | 
|  |                         "ctrl shift HOME", "selectFirstExtendSelection", | 
|  |                               "ctrl HOME", "selectFirstChangeLead", | 
|  |                                     "END", "selectLast", | 
|  |                               "shift END", "selectLastExtendSelection", | 
|  |                          "ctrl shift END", "selectLastExtendSelection", | 
|  |                                "ctrl END", "selectLastChangeLead", | 
|  |                                      "F2", "startEditing", | 
|  |                                  "ctrl A", "selectAll", | 
|  |                              "ctrl SLASH", "selectAll", | 
|  |                         "ctrl BACK_SLASH", "clearSelection", | 
|  |                               "ctrl LEFT", "scrollLeft", | 
|  |                            "ctrl KP_LEFT", "scrollLeft", | 
|  |                              "ctrl RIGHT", "scrollRight", | 
|  |                           "ctrl KP_RIGHT", "scrollRight", | 
|  |                                   "SPACE", "addToSelection", | 
|  |                              "ctrl SPACE", "toggleAndAnchor", | 
|  |                             "shift SPACE", "extendTo", | 
|  |                        "ctrl shift SPACE", "moveSelectionTo" | 
|  |                  }), | 
|  |             "Tree.focusInputMap.RightToLeft", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                                   "RIGHT", "selectParent", | 
|  |                                "KP_RIGHT", "selectParent", | 
|  |                                    "LEFT", "selectChild", | 
|  |                                 "KP_LEFT", "selectChild", | 
|  |                  }), | 
|  |             "Tree.ancestorInputMap", | 
|  |                new UIDefaults.LazyInputMap(new Object[] { | 
|  |                      "ESCAPE", "cancel" | 
|  |                  }), | 
|  |             // Bind specific keys that can invoke popup on currently | 
|  |              | 
|  |             "RootPane.ancestorInputMap", | 
|  |                 new UIDefaults.LazyInputMap(new Object[] { | 
|  |                      "shift F10", "postPopup", | 
|  |                   "CONTEXT_MENU", "postPopup" | 
|  |                   }), | 
|  |  | 
|  |             // These bindings are only enabled when there is a default | 
|  |              | 
|  |             "RootPane.defaultButtonWindowKeyBindings", new Object[] { | 
|  |                              "ENTER", "press", | 
|  |                     "released ENTER", "release", | 
|  |                         "ctrl ENTER", "press", | 
|  |                "ctrl released ENTER", "release" | 
|  |               }, | 
|  |         }; | 
|  |  | 
|  |         table.putDefaults(defaults); | 
|  |     } | 
|  |  | 
|  |     static int getFocusAcceleratorKeyMask() { | 
|  |         Toolkit tk = Toolkit.getDefaultToolkit(); | 
|  |         if (tk instanceof SunToolkit) { | 
|  |             return ((SunToolkit)tk).getFocusAcceleratorKeyMask(); | 
|  |         } | 
|  |         return ActionEvent.ALT_MASK; | 
|  |     } | 
|  |  | 
|  |  | 
|  |  | 
|  |      | 
|  |  | 
|  |  | 
|  |      */ | 
|  |     static Object getUIOfType(ComponentUI ui, Class klass) { | 
|  |         if (klass.isInstance(ui)) { | 
|  |             return ui; | 
|  |         } | 
|  |         return null; | 
|  |     } | 
|  |  | 
|  |     // ********* Auditory Cue support methods and objects ********* | 
|  |     // also see the "AuditoryCues" section of the defaults table | 
|  |  | 
|  |      | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |      */ | 
|  |     protected ActionMap getAudioActionMap() { | 
|  |         ActionMap audioActionMap = (ActionMap)UIManager.get( | 
|  |                                               "AuditoryCues.actionMap"); | 
|  |         if (audioActionMap == null) { | 
|  |             Object[] acList = (Object[])UIManager.get("AuditoryCues.cueList"); | 
|  |             if (acList != null) { | 
|  |                 audioActionMap = new ActionMapUIResource(); | 
|  |                 for(int counter = acList.length-1; counter >= 0; counter--) { | 
|  |                     audioActionMap.put(acList[counter], | 
|  |                                        createAudioAction(acList[counter])); | 
|  |                 } | 
|  |             } | 
|  |             UIManager.getLookAndFeelDefaults().put("AuditoryCues.actionMap", | 
|  |                                                    audioActionMap); | 
|  |         } | 
|  |         return audioActionMap; | 
|  |     } | 
|  |  | 
|  |      | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |      */ | 
|  |     protected Action createAudioAction(Object key) { | 
|  |         if (key != null) { | 
|  |             String audioKey = (String)key; | 
|  |             String audioValue = (String)UIManager.get(key); | 
|  |             return new AudioAction(audioKey, audioValue); | 
|  |         } else { | 
|  |             return null; | 
|  |         } | 
|  |     } | 
|  |  | 
|  |      | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |      */ | 
|  |     private class AudioAction extends AbstractAction implements LineListener { | 
|  |         // We strive to only play one sound at a time (other platforms | 
|  |         // appear to do this). This is done by maintaining the field | 
|  |         // clipPlaying. Every time a sound is to be played, | 
|  |         // cancelCurrentSound is invoked to cancel any sound that may be | 
|  |          | 
|  |         private String audioResource; | 
|  |         private byte[] audioBuffer; | 
|  |  | 
|  |          | 
|  |  | 
|  |  | 
|  |  | 
|  |          */ | 
|  |         public AudioAction(String name, String resource) { | 
|  |             super(name); | 
|  |             audioResource = resource; | 
|  |         } | 
|  |  | 
|  |         public void actionPerformed(ActionEvent e) { | 
|  |             if (audioBuffer == null) { | 
|  |                 audioBuffer = loadAudioData(audioResource); | 
|  |             } | 
|  |             if (audioBuffer != null) { | 
|  |                 cancelCurrentSound(null); | 
|  |                 try { | 
|  |                     AudioInputStream soundStream = | 
|  |                         AudioSystem.getAudioInputStream( | 
|  |                             new ByteArrayInputStream(audioBuffer)); | 
|  |                     DataLine.Info info = | 
|  |                         new DataLine.Info(Clip.class, soundStream.getFormat()); | 
|  |                     Clip clip = (Clip) AudioSystem.getLine(info); | 
|  |                     clip.open(soundStream); | 
|  |                     clip.addLineListener(this); | 
|  |  | 
|  |                     synchronized(audioLock) { | 
|  |                         clipPlaying = clip; | 
|  |                     } | 
|  |  | 
|  |                     clip.start(); | 
|  |                 } catch (Exception ex) {} | 
|  |             } | 
|  |         } | 
|  |  | 
|  |         public void update(LineEvent event) { | 
|  |             if (event.getType() == LineEvent.Type.STOP) { | 
|  |                 cancelCurrentSound((Clip)event.getLine()); | 
|  |             } | 
|  |         } | 
|  |  | 
|  |          | 
|  |  | 
|  |  | 
|  |          */ | 
|  |         private void cancelCurrentSound(Clip clip) { | 
|  |             Clip lastClip = null; | 
|  |  | 
|  |             synchronized(audioLock) { | 
|  |                 if (clip == null || clip == clipPlaying) { | 
|  |                     lastClip = clipPlaying; | 
|  |                     clipPlaying = null; | 
|  |                 } | 
|  |             } | 
|  |  | 
|  |             if (lastClip != null) { | 
|  |                 lastClip.removeLineListener(this); | 
|  |                 lastClip.close(); | 
|  |             } | 
|  |         } | 
|  |     } | 
|  |  | 
|  |      | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |      */ | 
|  |     private byte[] loadAudioData(final String soundFile){ | 
|  |         if (soundFile == null) { | 
|  |             return null; | 
|  |         } | 
|  |          | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |          */ | 
|  |         byte[] buffer = AccessController.doPrivileged( | 
|  |                                                  new PrivilegedAction<byte[]>() { | 
|  |                 public byte[] run() { | 
|  |                     try { | 
|  |                         InputStream resource = BasicLookAndFeel.this. | 
|  |                             getClass().getResourceAsStream(soundFile); | 
|  |                         if (resource == null) { | 
|  |                             return null; | 
|  |                         } | 
|  |                         BufferedInputStream in = | 
|  |                             new BufferedInputStream(resource); | 
|  |                         ByteArrayOutputStream out = | 
|  |                             new ByteArrayOutputStream(1024); | 
|  |                         byte[] buffer = new byte[1024]; | 
|  |                         int n; | 
|  |                         while ((n = in.read(buffer)) > 0) { | 
|  |                             out.write(buffer, 0, n); | 
|  |                         } | 
|  |                         in.close(); | 
|  |                         out.flush(); | 
|  |                         buffer = out.toByteArray(); | 
|  |                         return buffer; | 
|  |                     } catch (IOException ioe) { | 
|  |                         System.err.println(ioe.toString()); | 
|  |                         return null; | 
|  |                     } | 
|  |                 } | 
|  |             }); | 
|  |         if (buffer == null) { | 
|  |             System.err.println(getClass().getName() + "/" + | 
|  |                                soundFile + " not found."); | 
|  |             return null; | 
|  |         } | 
|  |         if (buffer.length == 0) { | 
|  |             System.err.println("warning: " + soundFile + | 
|  |                                " is zero-length"); | 
|  |             return null; | 
|  |         } | 
|  |         return buffer; | 
|  |     } | 
|  |  | 
|  |      | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |      */ | 
|  |     protected void playSound(Action audioAction) { | 
|  |         if (audioAction != null) { | 
|  |             Object[] audioStrings = (Object[]) | 
|  |                                     UIManager.get("AuditoryCues.playList"); | 
|  |             if (audioStrings != null) { | 
|  |                  | 
|  |                 HashSet<Object> audioCues = new HashSet<Object>(); | 
|  |                 for (Object audioString : audioStrings) { | 
|  |                     audioCues.add(audioString); | 
|  |                 } | 
|  |                  | 
|  |                 String actionName = (String)audioAction.getValue(Action.NAME); | 
|  |                  | 
|  |                 if (audioCues.contains(actionName)) { | 
|  |                     audioAction.actionPerformed(new | 
|  |                         ActionEvent(this, ActionEvent.ACTION_PERFORMED, | 
|  |                                     actionName)); | 
|  |                 } | 
|  |             } | 
|  |         } | 
|  |     } | 
|  |  | 
|  |  | 
|  |      | 
|  |  | 
|  |  | 
|  |      */ | 
|  |     static void installAudioActionMap(ActionMap map) { | 
|  |         LookAndFeel laf = UIManager.getLookAndFeel(); | 
|  |         if (laf instanceof BasicLookAndFeel) { | 
|  |             map.setParent(((BasicLookAndFeel)laf).getAudioActionMap()); | 
|  |         } | 
|  |     } | 
|  |  | 
|  |  | 
|  |      | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |      */ | 
|  |     static void playSound(JComponent c, Object actionKey) { | 
|  |         LookAndFeel laf = UIManager.getLookAndFeel(); | 
|  |         if (laf instanceof BasicLookAndFeel) { | 
|  |             ActionMap map = c.getActionMap(); | 
|  |             if (map != null) { | 
|  |                 Action audioAction = map.get(actionKey); | 
|  |                 if (audioAction != null) { | 
|  |                      | 
|  |                     ((BasicLookAndFeel)laf).playSound(audioAction); | 
|  |                 } | 
|  |             } | 
|  |         } | 
|  |     } | 
|  |  | 
|  |      | 
|  |  | 
|  |  | 
|  |      */ | 
|  |     class AWTEventHelper implements AWTEventListener,PrivilegedAction<Object> { | 
|  |         AWTEventHelper() { | 
|  |             super(); | 
|  |             AccessController.doPrivileged(this); | 
|  |         } | 
|  |  | 
|  |         public Object run() { | 
|  |             Toolkit tk = Toolkit.getDefaultToolkit(); | 
|  |             if(invocator == null) { | 
|  |                 tk.addAWTEventListener(this, AWTEvent.MOUSE_EVENT_MASK); | 
|  |             } else { | 
|  |                 tk.removeAWTEventListener(invocator); | 
|  |             } | 
|  |              | 
|  |             return null; | 
|  |         } | 
|  |  | 
|  |         public void eventDispatched(AWTEvent ev) { | 
|  |             int eventID = ev.getID(); | 
|  |             if((eventID & AWTEvent.MOUSE_EVENT_MASK) != 0) { | 
|  |                 MouseEvent me = (MouseEvent) ev; | 
|  |                 if(me.isPopupTrigger()) { | 
|  |                     MenuElement[] elems = MenuSelectionManager | 
|  |                             .defaultManager() | 
|  |                             .getSelectedPath(); | 
|  |                     if(elems != null && elems.length != 0) { | 
|  |                         return; | 
|  |                         // We shall not interfere with already opened menu | 
|  |                     } | 
|  |                     Object c = me.getSource(); | 
|  |                     JComponent src = null; | 
|  |                     if(c instanceof JComponent) { | 
|  |                         src = (JComponent) c; | 
|  |                     } else if(c instanceof BasicSplitPaneDivider) { | 
|  |                         // Special case - if user clicks on divider we must | 
|  |                          | 
|  |                         src = (JComponent) | 
|  |                             ((BasicSplitPaneDivider)c).getParent(); | 
|  |                     } | 
|  |                     if(src != null) { | 
|  |                         if(src.getComponentPopupMenu() != null) { | 
|  |                             Point pt = src.getPopupLocation(me); | 
|  |                             if(pt == null) { | 
|  |                                 pt = me.getPoint(); | 
|  |                                 pt = SwingUtilities.convertPoint((Component)c, | 
|  |                                                                   pt, src); | 
|  |                             } | 
|  |                             src.getComponentPopupMenu().show(src, pt.x, pt.y); | 
|  |                             me.consume(); | 
|  |                         } | 
|  |                     } | 
|  |                 } | 
|  |             } | 
|  |              | 
|  |             if (eventID == MouseEvent.MOUSE_PRESSED) { | 
|  |                 Object object = ev.getSource(); | 
|  |                 if (!(object instanceof Component)) { | 
|  |                     return; | 
|  |                 } | 
|  |                 Component component = (Component)object; | 
|  |                 if (component != null) { | 
|  |                     Component parent = component; | 
|  |                     while (parent != null && !(parent instanceof Window)) { | 
|  |                         if (parent instanceof JInternalFrame) { | 
|  |                              | 
|  |                             try { ((JInternalFrame)parent).setSelected(true); } | 
|  |                             catch (PropertyVetoException e1) { } | 
|  |                         } | 
|  |                         parent = parent.getParent(); | 
|  |                     } | 
|  |                 } | 
|  |             } | 
|  |         } | 
|  |     } | 
|  | } |