JAL-1807 Bob
[jalviewjs.git] / site / j2s / swingjs / plaf / HTML5LookAndFeel.java
1 /*
2  * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.  Oracle designates this
8  * particular file as subject to the "Classpath" exception as provided
9  * by Oracle in the LICENSE file that accompanied this code.
10  *
11  * This code is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14  * version 2 for more details (a copy is included in the LICENSE file that
15  * accompanied this code).
16  *
17  * You should have received a copy of the GNU General Public License version
18  * 2 along with this work; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20  *
21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22  * or visit www.oracle.com if you need additional information or have any
23  * questions.
24  */
25
26 package swingjs.plaf;
27
28 //import jsjava.awt.AWTEvent;
29 import jsjava.awt.Color;
30 import jsjava.awt.Dimension;
31 import jsjava.awt.Font;
32 import jsjavax.swing.DefaultListCellRenderer;
33 import jsjavax.swing.JTextField;
34 //import jsjava.awt.Component;
35 //import jsjava.awt.Dimension;
36 //import jsjava.awt.Font;
37 //import jsjava.awt.Point;
38 //import jsjava.awt.Toolkit;
39 //import jsjava.awt.Window;
40 //import jsjava.awt.event.AWTEventListener;
41 //import jsjava.awt.event.ActionEvent;
42 //import jsjava.awt.event.KeyEvent;
43 //import jsjava.awt.event.MouseEvent;
44 //import jsjava.beans.PropertyChangeEvent;
45 //import jsjava.beans.PropertyChangeListener;
46 //import jsjava.beans.PropertyVetoException;
47 //import java.io.BufferedInputStream;
48 //import java.io.ByteArrayInputStream;
49 //import java.io.ByteArrayOutputStream;
50 //import java.io.IOException;
51 //import java.io.InputStream;
52 ////import java.io.Serializable;
53 //import jsjava.security.AccessController;
54 //import jsjava.security.PrivilegedAction;
55 //import java.util.HashSet;
56 //import jsjava.util.Locale;
57 //
58 ////import jsjavax.sound.sampled.AudioInputStream;
59 ////import jsjavax.sound.sampled.AudioSystem;
60 ////import jsjavax.sound.sampled.Clip;
61 ////import jsjavax.sound.sampled.DataLine;
62 ////import jsjavax.sound.sampled.LineEvent;
63 ////import jsjavax.sound.sampled.LineListener;
64 //import jsjavax.swing.AbstractAction;
65 //import jsjavax.swing.Action;
66 //import jsjavax.swing.ActionMap;
67 //import jsjavax.swing.DefaultListCellRenderer;
68 //import jsjavax.swing.JComponent;
69 ////import jsjavax.swing.JInternalFrame;
70 //import jsjavax.swing.JTextField;
71 //import jsjavax.swing.LookAndFeel;
72 //import jsjavax.swing.MenuElement;
73 //import jsjavax.swing.MenuSelectionManager;
74 //import jsjavax.swing.SwingUtilities;
75 import jsjavax.swing.LookAndFeel;
76 import jsjavax.swing.UIDefaults;
77 //import jsjavax.swing.UIManager;
78 //import jsjavax.swing.border.BevelBorder;
79 //import jsjavax.swing.plaf.ActionMapUIResource;
80 //import jsjavax.swing.plaf.BorderUIResource;
81 import jsjavax.swing.plaf.ColorUIResource;
82 import jsjavax.swing.plaf.FontUIResource;
83 //import jsjavax.swing.plaf.ComponentUI;
84 import jsjavax.swing.plaf.DimensionUIResource;
85 //import jsjavax.swing.plaf.DimensionUIResource;
86 //import jsjavax.swing.plaf.InsetsUIResource;
87 ////import jsjavax.swing.plaf.basic.popupMenuUI;
88 ////import jsjavax.swing.plaf.basic.BasicSplitPaneDivider;
89 //import jsjavax.swing.text.DefaultEditorKit;
90 //
91 //import jssun.awt.AppContext;
92 //import jssun.swing.SwingUtilities2;
93 ////import jssun.swing.SwingLazyValue;
94 //
95 import jsjavax.swing.plaf.InsetsUIResource;
96 import jssun.swing.SwingLazyValue;
97
98 /**
99  * A base class to use in creating a look and feel for Swing.
100  * <p>
101  * Each of the {@code ComponentUI}s provided by {@code BasicLookAndFeel} derives
102  * its behavior from the defaults table. Unless otherwise noted each of the
103  * {@code ComponentUI} implementations in this package document the set of
104  * defaults they use. Unless otherwise noted the defaults are installed at the
105  * time {@code installUI} is invoked, and follow the recommendations outlined in
106  * {@code LookAndFeel} for installing defaults.
107  * <p>
108  * <strong>Warning:</strong> Serialized objects of this class will not be
109  * compatible with future Swing releases. The current serialization support is
110  * appropriate for short term storage or RMI between applications running the
111  * same version of Swing. As of 1.4, support for long term storage of all
112  * JavaBeans<sup><font size="-2">TM</font></sup> has been added to the
113  * <code>java.beans</code> package. Please see {@link java.beans.XMLEncoder}.
114  * 
115  * @author unattributed
116  */
117 public class HTML5LookAndFeel extends LookAndFeel {
118         // /**
119         // * Whether or not the developer has created a JPopupMenu.
120         // */
121         // static boolean needsEventHelper;
122         //
123         // /**
124         // * Lock used when manipulating clipPlaying.
125         // */
126         // private transient Object audioLock = new Object();
127         // /**
128         // * The Clip that is currently playing (set in AudioAction).
129         // */
130         // private Clip clipPlaying;
131         //
132         // AWTEventHelper invocator = null;
133         //
134         // /*
135         // * Listen for our AppContext being disposed
136         // */
137         // private PropertyChangeListener disposer = null;
138         //
139         /**
140          * Returns the look and feel defaults. The returned {@code UIDefaults} is
141          * populated by invoking, in order, {@code initClassDefaults},
142          * {@code initSystemColorDefaults} and {@code initComponentDefaults}.
143          * <p>
144          * While this method is public, it should only be invoked by the
145          * {@code UIManager} when the look and feel is set as the current look and
146          * feel and after {@code initialize} has been invoked.
147          * 
148          * @return the look and feel defaults
149          * 
150          * @see #initClassDefaults
151          * @see #initSystemColorDefaults
152          * @see #initComponentDefaults
153          */
154         public UIDefaults getDefaults() {
155                 UIDefaults table = new UIDefaults(610, 0.75f);
156
157                 initClassDefaults(table);
158                 initSystemColorDefaults(table);
159                 initComponentDefaults(table);
160
161                 return table;
162         }
163
164         /**
165          * {@inheritDoc}
166          */
167         public void initialize() {
168                 // if (needsEventHelper) {
169                 // installAWTEventListener();
170                 // }
171         }
172
173         void installAWTEventListener() {
174                 // if (invocator == null) {
175                 // invocator = new AWTEventHelper();
176                 // needsEventHelper = true;
177                 //
178                 // // Add a PropertyChangeListener to our AppContext so we're alerted
179                 // // when the AppContext is disposed(), at which time this laf should
180                 // // be uninitialize()d.
181                 // disposer = new PropertyChangeListener() {
182                 // public void propertyChange(PropertyChangeEvent prpChg) {
183                 // uninitialize();
184                 // }
185                 // };
186                 // AppContext.getAppContext().addPropertyChangeListener(
187                 // AppContext.GUI_DISPOSED,
188                 // disposer);
189                 // }
190         }
191
192         /**
193          * {@inheritDoc}
194          */
195         public void uninitialize() {
196                 // AppContext context = AppContext.getAppContext();
197                 // synchronized (popupMenuUI.MOUSE_GRABBER_KEY) {
198                 // Object grabber = context.get(popupMenuUI.MOUSE_GRABBER_KEY);
199                 // if (grabber != null) {
200                 // ((popupMenuUI.MouseGrabber)grabber).uninstall();
201                 // }
202                 // }
203                 // synchronized (popupMenuUI.MENU_KEYBOARD_HELPER_KEY) {
204                 // Object helper =
205                 // context.get(popupMenuUI.MENU_KEYBOARD_HELPER_KEY);
206                 // if (helper != null) {
207                 // ((popupMenuUI.MenuKeyboardHelper)helper).uninstall();
208                 // }
209                 // }
210                 //
211                 // if(invocator != null) {
212                 // AccessController.doPrivileged(invocator);
213                 // invocator = null;
214                 // }
215                 //
216                 // if (disposer != null) {
217                 // // Note that we're likely calling removePropertyChangeListener()
218                 // // during the course of AppContext.firePropertyChange().
219                 // // However, EventListenerAggreggate has code to safely modify
220                 // // the list under such circumstances.
221                 // context.removePropertyChangeListener(AppContext.GUI_DISPOSED,
222                 // disposer);
223                 // disposer = null;
224                 // }
225         }
226
227         /**
228          * Populates {@code table} with mappings from {@code uiClassID} to the fully
229          * qualified name of the ui class. The value for a particular
230          * {@code uiClassID} is {@code "jsjavax.swing.plaf.basic.Basic + uiClassID"}.
231          * For example, the value for the {@code uiClassID} {@code TreeUI} is
232          * {@code "jsjavax.swing.plaf.basic.BasicTreeUI"}.
233          * 
234          * @param table
235          *          the {@code UIDefaults} instance the entries are added to
236          * @throws NullPointerException
237          *           if {@code table} is {@code null}
238          * 
239          * @see jsjavax.swing.LookAndFeel
240          * @see #getDefaults
241          */
242         protected void initClassDefaults(UIDefaults table) {
243                 final String packageName = "swingjs.plaf.";
244                 Object[] uiDefaults = { 
245                 /**/            "ButtonUI",                                             packageName + "JSButtonUI",
246                 /**/            "CheckBoxUI",                                   packageName + "JSCheckBoxUI", 
247                                 "ColorChooserUI",                               packageName + "JSColorChooserUI", 
248           /**/          "FormattedTextFieldUI", packageName + "JSFormattedTextFieldUI", 
249           /**/          "MenuBarUI",                                            packageName + "JSMenuBarUI", 
250           /**/          "MenuUI",                                                       packageName + "JSMenuUI",
251           /**/          "MenuItemUI",                                   packageName + "JSMenuItemUI", 
252           /**/          "CheckBoxMenuItemUI",   packageName + "JSCheckBoxMenuItemUI", 
253           /**/          "RadioButtonMenuItemUI", packageName + "JSRadioButtonMenuItemUI", 
254           /**/          "RadioButtonUI",                                packageName + "JSRadioButtonUI", 
255           /**/          "ToggleButtonUI",                       packageName + "JSToggleButtonUI", 
256           /**/          "PopupMenuUI",                                  packageName + "JSPopupMenuUI", 
257                                 "ProgressBarUI",                                packageName + "JSProgressBarUI", 
258                 /**/            "ScrollBarUI",                                  packageName + "JSScrollBarUI", 
259                 /**/            "ScrollPaneUI",                                 packageName + "JSScrollPaneUI", 
260                                 "SplitPaneUI",                                  packageName + "JSSplitPaneUI", 
261           /**/          "SliderUI",                                             packageName + "JSSliderUI",
262                 /**/            "SeparatorUI",                                  packageName + "JSSeparatorUI", 
263                                 "SpinnerUI",                                            packageName + "JSSpinnerUI", 
264                 /**/     "ToolBarSeparatorUI",  packageName + "JSToolBarSeparatorUI", 
265                 /**/   "PopupMenuSeparatorUI", packageName + "JSPopupMenuSeparatorUI", 
266                                 "TabbedPaneUI",                                 packageName + "JSTabbedPaneUI", 
267           /**/   "TextAreaUI",                                  packageName + "JSTextAreaUI", 
268           /**/   "TextFieldUI",                                         packageName + "JSTextFieldUI", 
269           /**/   "PasswordFieldUI",                     packageName + "JSPasswordFieldUI", 
270         "TextPaneUI",                                   packageName + "JSTextPaneUI", 
271                                 "EditorPaneUI",                                 packageName + "JSEditorPaneUI", 
272                                 "TreeUI",                                                               packageName + "JSTreeUI",
273                 /**/     "LabelUI",                                                     packageName + "JSLabelUI", 
274                                 "ListUI",                                                       packageName + "JSListUI", 
275                                 "ToolBarUI",                                            packageName + "JSToolBarUI",
276                                 "ToolTipUI",                                            packageName + "JSToolTipUI", 
277                 /**/     "ComboBoxUI",                                  packageName + "JSComboBoxUI", 
278                                 "TableUI",                                                      packageName + "JSTableUI",
279                                 "TableHeaderUI",                                packageName + "JSTableHeaderUI", 
280                                 "InternalFrameUI",                      packageName + "JSInternalFrameUI", 
281                                 "DesktopPaneUI",                                packageName + "JSDesktopPaneUI", 
282                                 "DesktopIconUI",                                packageName + "JSDesktopIconUI", 
283                                 "OptionPaneUI",                                 packageName + "JSOptionPaneUI", 
284           /**/          "PanelUI",                                                      packageName + "JSPanelUI",
285                 /**/            "ViewportUI",                                   packageName + "JSViewportUI", 
286           /**/    "RootPaneUI",                                         packageName + "JSRootPaneUI"
287                                 };
288
289                 table.putDefaults(uiDefaults);
290         }
291
292         /**
293          * Populates {@code table} with system colors. This creates an array of
294          * {@code name-color} pairs and invokes {@code loadSystemColors}.
295          * <p>
296          * The name is a {@code String} that corresponds to the name of one of the
297          * static {@code SystemColor} fields in the {@code SystemColor} class. A
298          * name-color pair is created for every such {@code SystemColor} field.
299          * <p>
300          * The {@code color} corresponds to a hex {@code String} as understood by
301          * {@code Color.decode}. For example, one of the {@code name-color} pairs is
302          * {@code "desktop"-"#005C5C"}. This corresponds to the {@code SystemColor}
303          * field {@code desktop}, with a color value of {@code new Color(0x005C5C)}.
304          * <p>
305          * The following shows two of the {@code name-color} pairs:
306          * 
307          * <pre>
308          * String[] nameColorPairs = new String[] { &quot;desktop&quot;, &quot;#005C5C&quot;, &quot;activeCaption&quot;,
309          *              &quot;#000080&quot; };
310          * loadSystemColors(table, nameColorPairs, isNativeLookAndFeel());
311          * </pre>
312          * 
313          * As previously stated, this invokes {@code loadSystemColors} with the
314          * supplied {@code table} and {@code name-color} pair array. The last argument
315          * to {@code loadSystemColors} indicates whether the value of the field in
316          * {@code SystemColor} should be used. This method passes the value of
317          * {@code isNativeLookAndFeel()} as the last argument to
318          * {@code loadSystemColors}.
319          * 
320          * @param table
321          *          the {@code UIDefaults} object the values are added to
322          * @throws NullPointerException
323          *           if {@code table} is {@code null}
324          * 
325          * @see jsjava.awt.SystemColor
326          * @see #getDefaults
327          * @see #loadSystemColors
328          */
329         protected void initSystemColorDefaults(UIDefaults table) {
330                 String[] defaultSystemColors = { 
331                                 
332                                 
333 //              "desktop", "#005C5C", /*
334 //                                                                                                                                                                                                                                               * Color of the
335 //                                                                                                                                                                                                                                               * desktop
336 //                                                                                                                                                                                                                                               * background
337 //                                                                                                                                                                                                                                               */
338 //              "activeCaption", "#000080", /*
339 //                                                                                                                               * Color for captions (title bars) when they are
340 //                                                                                                                               * active.
341 //                                                                                                                               */
342 //              "activeCaptionText", "#FFFFFF", /*
343 //                                                                                                                                               * Text color for text in captions (title
344 //                                                                                                                                               * bars).
345 //                                                                                                                                               */
346 //              "activeCaptionBorder", "#C0C0C0", /*
347 //                                                                                                                                                       * Border color for caption (title bar)
348 //                                                                                                                                                       * window borders.
349 //                                                                                                                                                       */
350 //              "inactiveCaption", "#808080", /*
351 //                                                                                                                                       * Color for captions (title bars) when not
352 //                                                                                                                                       * active.
353 //                                                                                                                                       */
354 //              "inactiveCaptionText", "#C0C0C0", /*
355 //                                                                                                                                                       * Text color for text in inactive
356 //                                                                                                                                                       * captions (title bars).
357 //                                                                                                                                                       */
358 //              "inactiveCaptionBorder", "#C0C0C0", /*
359 //                                                                                                                                                               * Border color for inactive caption
360 //                                                                                                                                                               * (title bar) window borders.
361 //                                                                                                                                                               */
362                                 // plaf.metal.OceanTheme
363                 "window", "#FFFFFF", /* Default color for the interior of windows */
364 //              "windowBorder", "#000000", /* ??? */
365                 "windowText", "#333333", /* ??? */
366                 "menu", "#C0C0C0", /* Background color for menus */
367                 "menuText", "#333333", /* Text color for menus */
368                 "text", "#C0C0C0", /* Text background color */
369                 "textText", "#333333", /* Text foreground color */
370 //              "textHighlight", "#000080", /* Text background color when selected */
371 //              "textHighlightText", "#FFFFFF", /* Text color when selected */
372 //              "textInactiveText", "#808080", /* Text color when disabled */
373                 "control", "#EEEEEE", // SECONDARY3 Default color for controls (buttons, sliders, etc)
374                 "controlText", "#333333", //  Default color for text in controls 
375 //              "controlHighlight", "#C0C0C0", /*
376 //                                                                                                                                               * Specular highlight (opposite of the
377 //                                                                                                                                               * shadow)
378 //                                                                                                                                               */
379 //              "controlLtHighlight", "#FFFFFF", /* Highlight color for controls */
380 //              "controlShadow", "#808080", /* Shadow color for controls */
381 //              "controlDkShadow", "#000000", /* Dark shadow color for controls */
382                 "scrollbar", "#E0E0E0", /* Scrollbar background (usually the "track") */
383                 "info", "#FFFFE1", /* ??? */
384                 "infoText", "#000000" /* ??? */
385                 };
386
387                 loadSystemColors(table, defaultSystemColors, isNativeLookAndFeel());
388         }
389
390         /**
391          * Populates {@code table} with the {@code name-color} pairs in
392          * {@code systemColors}. Refer to {@link #initSystemColorDefaults(UIDefaults)}
393          * for details on the format of {@code systemColors}.
394          * <p>
395          * An entry is added to {@code table} for each of the {@code name-color} pairs
396          * in {@code systemColors}. The entry key is the {@code name} of the
397          * {@code name-color} pair.
398          * <p>
399          * The value of the entry corresponds to the {@code color} of the
400          * {@code name-color} pair. The value of the entry is calculated in one of two
401          * ways. With either approach the value is always a {@code ColorUIResource}.
402          * <p>
403          * If {@code useNative} is {@code false}, the {@code color} is created by
404          * using {@code Color.decode} to convert the {@code String} into a
405          * {@code Color}. If {@code decode} can not convert the {@code String} into a
406          * {@code Color} ({@code NumberFormatException} is thrown) then a
407          * {@code ColorUIResource} of black is used.
408          * <p>
409          * If {@code useNative} is {@code true}, the {@code color} is the value of the
410          * field in {@code SystemColor} with the same name as the {@code name} of the
411          * {@code name-color} pair. If the field is not valid, a
412          * {@code ColorUIResource} of black is used.
413          * 
414          * @param table
415          *          the {@code UIDefaults} object the values are added to
416          * @param systemColors
417          *          array of {@code name-color} pairs as described in
418          *          {@link #initSystemColorDefaults(UIDefaults)}
419          * @param useNative
420          *          whether the color is obtained from {@code SystemColor} or
421          *          {@code Color.decode}
422          * @throws NullPointerException
423          *           if {@code systemColors} is {@code null}; or {@code systemColors}
424          *           is not empty, and {@code table} is {@code null}; or one of the
425          *           names of the {@code name-color} pairs is {@code null}; or
426          *           {@code useNative} is {@code false} and one of the {@code colors}
427          *           of the {@code name-color} pairs is {@code null}
428          * @throws ArrayIndexOutOfBoundsException
429          *           if {@code useNative} is {@code false} and
430          *           {@code systemColors.length} is odd
431          * 
432          * @see #initSystemColorDefaults(jsjavax.swing.UIDefaults)
433          * @see jsjava.awt.SystemColor
434          * @see jsjava.awt.Color#decode(String)
435          */
436         protected void loadSystemColors(UIDefaults table, String[] systemColors,
437                         boolean useNative) {
438                 /*
439                  * PENDING(hmuller) We don't load the system colors below because they're
440                  * not reliable. Hopefully we'll be able to do better in a future version of
441                  * AWT.
442                  */
443 //              if (useNative) {
444 //                      for (int i = 0; i < systemColors.length; i += 2) {
445 //                              Color color = Color.black;
446 //                              // try {
447 //                              // String name = systemColors[i];
448 //                              // color = (Color)(SystemColor.class.getField(name).get(null));
449 //                              // } catch (Exception e) {
450 //                              // }
451 //                              table.put(systemColors[i], new ColorUIResource(color));
452 //                      }
453 //              } else {
454                         for (int i = 0; i < systemColors.length; i += 2) {
455                                 Color color = Color.black;
456                                 try {
457                                         color = Color.decode(systemColors[i + 1]);
458                                 } catch (NumberFormatException e) {
459                                         e.printStackTrace();
460                                 }
461                                 table.put(systemColors[i], new ColorUIResource(color));
462                         }
463 //              }
464         }
465
466         /**
467          * Initialize the defaults table with the name of the ResourceBundle used for
468          * getting localized defaults. Also initialize the default locale used when no
469          * locale is passed into UIDefaults.get(). The default locale should generally
470          * not be relied upon. It is here for compatability with releases prior to
471          * 1.4.
472          */
473         private void initResourceBundle(UIDefaults table) {
474                 // table.setDefaultLocale( Locale.getDefault() );
475                 // table.addResourceBundle(
476                 // "com.sun.swing.internal.plaf.basic.resources.basic" );
477         }
478
479         /**
480          * Populates {@code table} with the defaults for the basic look and feel.
481          * 
482          * @param table
483          *          the {@code UIDefaults} to add the values to
484          * @throws NullPointerException
485          *           if {@code table} is {@code null}
486          */
487         protected void initComponentDefaults(UIDefaults table) {
488
489                 initResourceBundle(table);
490
491                 // // *** Shared Integers
492                 // Integer fiveHundred = new Integer(500);
493
494                 // *** Shared Longs
495                 Long oneThousand = new Long(1000);
496
497                 // *** Shared Fonts
498                 Integer twelve = new Integer(12);
499                 Integer fontPlain = new Integer(Font.PLAIN);
500                 // Integer fontBold = new Integer(Font.BOLD);
501                 // Object dialogPlain12 = new SwingLazyValue(
502                 // "jsjavax.swing.plaf.FontUIResource",
503                 // null,
504                 // new Object[] {Font.DIALOG, fontPlain, twelve});
505                 Object serifPlain12 = new FontUIResource(Font.SERIF, Font.PLAIN, 12);
506                 Object sansSerifPlain12 = new FontUIResource(Font.SANS_SERIF, Font.PLAIN,
507                                 12);
508                 Object dialogPlain12 = new FontUIResource(Font.DIALOG, Font.PLAIN, 12);
509                 Object monospacedPlain12 = new FontUIResource(Font.MONOSPACED, Font.PLAIN, 12);
510                 // Object dialogBold12 = new SwingLazyValue(
511                 // "jsjavax.swing.plaf.FontUIResource",
512                 // null,
513                 // new Object[] {Font.DIALOG, fontBold, twelve});
514                 //
515
516                 // *** Shared Colors
517                 // ColorUIResource red = new ColorUIResource(Color.red);
518                 ColorUIResource black = new ColorUIResource(Color.black);
519                 ColorUIResource white = new ColorUIResource(Color.white);
520                 // ColorUIResource yellow = new ColorUIResource(Color.yellow);
521                 ColorUIResource gray = new ColorUIResource(Color.gray);
522                 // ColorUIResource lightGray = new ColorUIResource(Color.lightGray);
523                 ColorUIResource darkGray = new ColorUIResource(Color.darkGray);
524                 // ColorUIResource scrollBarTrack = new ColorUIResource(224, 224, 224);
525
526                 Color control = table.getColor("control");
527                 // Color controlDkShadow = table.getColor("controlDkShadow");
528                 // Color controlHighlight = table.getColor("controlHighlight");
529                 // Color controlLtHighlight = table.getColor("controlLtHighlight");
530                 // Color controlShadow = table.getColor("controlShadow");
531                 Color controlText = table.getColor("controlText");
532                 Color menu = table.getColor("menu");
533                 Color menuText = table.getColor("menuText");
534                 // Color textHighlight = table.getColor("textHighlight");
535                 // Color textHighlightText = table.getColor("textHighlightText");
536                 // Color textInactiveText = table.getColor("textInactiveText");
537                 Color textText = table.getColor("textText");
538                 Color window = table.getColor("window");
539
540                 // *** Shared Insets
541                 InsetsUIResource zeroInsets = new InsetsUIResource(0, 0, 0, 0);
542                 InsetsUIResource twoInsets = new InsetsUIResource(2, 2, 2, 2);
543                 InsetsUIResource threeInsets = new InsetsUIResource(3, 3, 3, 3);
544
545                 // // *** Shared Borders
546                 // Object marginBorder = new SwingLazyValue(
547                 // "jsjavax.swing.plaf.basic.BasicBorders$MarginBorder");
548                 // Object etchedBorder = new SwingLazyValue(
549                 // "jsjavax.swing.plaf.BorderUIResource",
550                 // "getEtchedBorderUIResource");
551                 // Object loweredBevelBorder = new SwingLazyValue(
552                 // "jsjavax.swing.plaf.BorderUIResource",
553                 // "getLoweredBevelBorderUIResource");
554                 //
555                 // Object popupMenuBorder = new SwingLazyValue(
556                 // "jsjavax.swing.plaf.basic.BasicBorders",
557                 // "getInternalFrameBorder");
558                 //
559                 // Object blackLineBorder = new SwingLazyValue(
560                 // "jsjavax.swing.plaf.BorderUIResource",
561                 // "getBlackLineBorderUIResource");
562                 // Object focusCellHighlightBorder = new SwingLazyValue(
563                 // "jsjavax.swing.plaf.BorderUIResource$LineBorderUIResource",
564                 // null,
565                 // new Object[] {yellow});
566                 //
567                 // Object noFocusBorder = new
568                 // BorderUIResource.EmptyBorderUIResource(1,1,1,1);
569                 //
570                 // Object tableHeaderBorder = new SwingLazyValue(
571                 // "jsjavax.swing.plaf.BorderUIResource$BevelBorderUIResource",
572                 // null,
573                 // new Object[] { new Integer(BevelBorder.RAISED),
574                 // controlLtHighlight,
575                 // control,
576                 // controlDkShadow,
577                 // controlShadow });
578                 //
579                 //
580                 // // *** Button value objects
581                 //
582                 // Object buttonBorder =
583                 // new SwingLazyValue(
584                 // "jsjavax.swing.plaf.basic.BasicBorders",
585                 // "getButtonBorder");
586                 //
587                 // Object buttonToggleBorder =
588                 // new SwingLazyValue(
589                 // "jsjavax.swing.plaf.basic.BasicBorders",
590                 // "getToggleButtonBorder");
591                 //
592                 // Object radioButtonBorder =
593                 // new SwingLazyValue(
594                 // "jsjavax.swing.plaf.basic.BasicBorders",
595                 // "getRadioButtonBorder");
596                 //
597                 // // *** FileChooser / FileView value objects
598                 //
599                 // Object newFolderIcon = SwingUtilities2.makeIcon(getClass(),
600                 // BasicLookAndFeel.class,
601                 // "icons/NewFolder.gif");
602                 // Object upFolderIcon = SwingUtilities2.makeIcon(getClass(),
603                 // BasicLookAndFeel.class,
604                 // "icons/UpFolder.gif");
605                 // Object homeFolderIcon = SwingUtilities2.makeIcon(getClass(),
606                 // BasicLookAndFeel.class,
607                 // "icons/HomeFolder.gif");
608                 // Object detailsViewIcon = SwingUtilities2.makeIcon(getClass(),
609                 // BasicLookAndFeel.class,
610                 // "icons/DetailsView.gif");
611                 // Object listViewIcon = SwingUtilities2.makeIcon(getClass(),
612                 // BasicLookAndFeel.class,
613                 // "icons/ListView.gif");
614                 // Object directoryIcon = SwingUtilities2.makeIcon(getClass(),
615                 // BasicLookAndFeel.class,
616                 // "icons/Directory.gif");
617                 // Object fileIcon = SwingUtilities2.makeIcon(getClass(),
618                 // BasicLookAndFeel.class,
619                 // "icons/File.gif");
620                 // Object computerIcon = SwingUtilities2.makeIcon(getClass(),
621                 // BasicLookAndFeel.class,
622                 // "icons/Computer.gif");
623                 // Object hardDriveIcon = SwingUtilities2.makeIcon(getClass(),
624                 // BasicLookAndFeel.class,
625                 // "icons/HardDrive.gif");
626                 // Object floppyDriveIcon = SwingUtilities2.makeIcon(getClass(),
627                 // BasicLookAndFeel.class,
628                 // "icons/FloppyDrive.gif");
629                 //
630                 //
631                 // // *** InternalFrame value objects
632                 //
633                 // Object internalFrameBorder = new SwingLazyValue(
634                 // "jsjavax.swing.plaf.basic.BasicBorders",
635                 // "getInternalFrameBorder");
636                 //
637                 // // *** List value objects
638                 //
639                 Object listCellRendererActiveValue = new UIDefaults.ActiveValue() {
640                         public Object createValue(UIDefaults table) {
641                                 return new DefaultListCellRenderer.UIResource();
642                         }
643                 };
644
645                 //
646                 // // *** Menus value objects
647                 //
648                 // Object menuBarBorder =
649                 // new SwingLazyValue(
650                 // "jsjavax.swing.plaf.basic.BasicBorders",
651                 // "getMenuBarBorder");
652                 //
653                 // Object menuItemCheckIcon =
654                 // new SwingLazyValue(
655                 // "jsjavax.swing.plaf.basic.BasicIconFactory",
656                 // "getMenuItemCheckIcon");
657                 //
658                 // Object menuItemArrowIcon =
659                 // new SwingLazyValue(
660                 // "jsjavax.swing.plaf.basic.BasicIconFactory",
661                 // "getMenuItemArrowIcon");
662                 //
663                 //
664                 // Object menuArrowIcon =
665                 // new SwingLazyValue(
666                 // "jsjavax.swing.plaf.basic.BasicIconFactory",
667                 // "getMenuArrowIcon");
668                 //
669                 // Object checkBoxIcon =
670                 // new SwingLazyValue(
671                 // "jsjavax.swing.plaf.basic.BasicIconFactory",
672                 // "getCheckBoxIcon");
673                 //
674                 // Object radioButtonIcon =
675                 // new SwingLazyValue(
676                 // "jsjavax.swing.plaf.basic.BasicIconFactory",
677                 // "getRadioButtonIcon");
678                 //
679                 // Object checkBoxMenuItemIcon =
680                 // new SwingLazyValue(
681                 // "jsjavax.swing.plaf.basic.BasicIconFactory",
682                 // "getCheckBoxMenuItemIcon");
683                 //
684                 // Object radioButtonMenuItemIcon =
685                 // new SwingLazyValue(
686                 // "jsjavax.swing.plaf.basic.BasicIconFactory",
687                 // "getRadioButtonMenuItemIcon");
688                 //
689                 // Object menuItemAcceleratorDelimiter = new String("+");
690                 //
691                 // // *** OptionPane value objects
692                 //
693                 // Object optionPaneMinimumSize = new DimensionUIResource(262, 90);
694                 //
695                 Integer zero = new Integer(0);
696                 // Object zeroBorder = new SwingLazyValue(
697                 // "jsjavax.swing.plaf.BorderUIResource$EmptyBorderUIResource",
698                 // new Object[] {zero, zero, zero, zero});
699                 //
700                 // Integer ten = new Integer(10);
701                 // Object optionPaneBorder = new SwingLazyValue(
702                 // "jsjavax.swing.plaf.BorderUIResource$EmptyBorderUIResource",
703                 // new Object[] {ten, ten, twelve, ten});
704                 //
705                 // Object optionPaneButtonAreaBorder = new SwingLazyValue(
706                 // "jsjavax.swing.plaf.BorderUIResource$EmptyBorderUIResource",
707                 // new Object[] {new Integer(6), zero, zero, zero});
708                 //
709                 //
710                 // // *** ProgessBar value objects
711                 //
712                 // Object progressBarBorder =
713                 // new SwingLazyValue(
714                 // "jsjavax.swing.plaf.basic.BasicBorders",
715                 // "getProgressBarBorder");
716                 //
717                 // // ** ScrollBar value objects
718                 //
719                 // Object minimumThumbSize = new DimensionUIResource(8,8);
720                 // Object maximumThumbSize = new DimensionUIResource(4096,4096);
721                 //
722                 // // ** Slider value objects
723                 //
724                 // Object sliderFocusInsets = twoInsets;
725                 //
726                 // Object toolBarSeparatorSize = new DimensionUIResource( 10, 10 );
727                 //
728                 //
729                 // // *** SplitPane value objects
730                 //
731                 // Object splitPaneBorder =
732                 // new SwingLazyValue(
733                 // "jsjavax.swing.plaf.basic.BasicBorders",
734                 // "getSplitPaneBorder");
735                 // Object splitPaneDividerBorder =
736                 // new SwingLazyValue(
737                 // "jsjavax.swing.plaf.basic.BasicBorders",
738                 // "getSplitPaneDividerBorder");
739                 //
740                 // ** TabbedBane value objects
741
742                 Object tabbedPaneTabInsets = new InsetsUIResource(0, 4, 1, 4);
743
744                 Object tabbedPaneTabPadInsets = new InsetsUIResource(2, 2, 2, 1);
745
746                 Object tabbedPaneTabAreaInsets = new InsetsUIResource(3, 2, 0, 2);
747
748                 Object tabbedPaneContentBorderInsets = new InsetsUIResource(2, 2, 3, 3);
749
750                 // *** Text value objects
751
752                 // Object textFieldBorder =
753                 // new SwingLazyValue(
754                 // "jsjavax.swing.plaf.basic.BasicBorders",
755                 // "getTextFieldBorder");
756                 //
757                 Object editorMargin = threeInsets;
758
759                 // Object caretBlinkRate = fiveHundred;
760                 Integer four = new Integer(4);
761                 //
762                 // Object[] allAuditoryCues = new Object[] {
763                 // "CheckBoxMenuItem.commandSound",
764                 // "InternalFrame.closeSound",
765                 // "InternalFrame.maximizeSound",
766                 // "InternalFrame.minimizeSound",
767                 // "InternalFrame.restoreDownSound",
768                 // "InternalFrame.restoreUpSound",
769                 // "MenuItem.commandSound",
770                 // "OptionPane.errorSound",
771                 // "OptionPane.informationSound",
772                 // "OptionPane.questionSound",
773                 // "OptionPane.warningSound",
774                 // "PopupMenu.popupSound",
775                 // "RadioButtonMenuItem.commandSound"};
776                 //
777                 // Object[] noAuditoryCues = new Object[] {"mute"};
778                 //
779                 // // *** Component Defaults
780                 //
781                 Object[] defaults = {
782                                 "*.font",
783                                 dialogPlain12,
784                                 "*.background",
785                                 control,
786                                 "*.foreground",
787                                 controlText,
788                                 // *** Auditory Feedback
789                                 // "AuditoryCues.cueList", allAuditoryCues,
790                                 // "AuditoryCues.allAuditoryCues", allAuditoryCues,
791                                 // "AuditoryCues.noAuditoryCues", noAuditoryCues,
792                                 // // this key defines which of the various cues to render.
793                                 // // L&Fs that want auditory feedback NEED to override playList.
794                                 // "AuditoryCues.playList", null,
795
796                                 // *** Buttons
797                                 // "Button.defaultButtonFollowsFocus", Boolean.TRUE,
798                                 // "Button.font", dialogPlain12,
799                                 // "Button.background", control,
800                                 // "Button.foreground", controlText,
801                                 // "Button.shadow", controlShadow,
802                                 // "Button.darkShadow", controlDkShadow,
803                                 // "Button.light", controlHighlight,
804                                 // "Button.highlight", controlLtHighlight,
805                                 // "Button.border", buttonBorder,
806                                 "Button.margin",
807                                 new InsetsUIResource(2, 14, 2, 14),
808                                 // "Button.textIconGap", four,
809                                 // "Button.textShiftOffset", zero,
810                                 // "Button.focusInputMap", new UIDefaults.LazyInputMap(new Object[] {
811                                 // "SPACE", "pressed",
812                                 // "released SPACE", "released",
813                                 // "ENTER", "pressed",
814                                 // "released ENTER", "released"
815                                 // }),
816                                 //
817                                 // "ToggleButton.font", dialogPlain12,
818                                 // "ToggleButton.background", control,
819                                 // "ToggleButton.foreground", controlText,
820                                 // "ToggleButton.shadow", controlShadow,
821                                 // "ToggleButton.darkShadow", controlDkShadow,
822                                 // "ToggleButton.light", controlHighlight,
823                                 // "ToggleButton.highlight", controlLtHighlight,
824                                 // "ToggleButton.border", buttonToggleBorder,
825                                 "ToggleButton.margin",
826                                 new InsetsUIResource(2, 14, 2, 14),
827                                 "ToggleButton.textIconGap",
828                                 four,
829                                 "ToggleButton.textShiftOffset",
830                                 zero,
831                                 // "ToggleButton.focusInputMap",
832                                 // new UIDefaults.LazyInputMap(new Object[] {
833                                 // "SPACE", "pressed",
834                                 // "released SPACE", "released"
835                                 // }),
836                                 //
837                                 // "RadioButton.font", dialogPlain12,
838                                 // "RadioButton.background", control,
839                                 // "RadioButton.foreground", controlText,
840                                 // "RadioButton.shadow", controlShadow,
841                                 // "RadioButton.darkShadow", controlDkShadow,
842                                 // "RadioButton.light", controlHighlight,
843                                 // "RadioButton.highlight", controlLtHighlight,
844                                 // "RadioButton.border", radioButtonBorder,
845                                 "RadioButton.margin",
846                                 twoInsets,
847                                 "RadioButton.textIconGap",
848                                 four,
849                                 "RadioButton.textShiftOffset",
850                                 zero,
851                                 // "RadioButton.icon", radioButtonIcon,
852                                 // "RadioButton.focusInputMap",
853                                 // new UIDefaults.LazyInputMap(new Object[] {
854                                 // "SPACE", "pressed",
855                                 // "released SPACE", "released",
856                                 // "RETURN", "pressed"
857                                 // }),
858                                 //
859                                 // "CheckBox.font", dialogPlain12,
860                                 // "CheckBox.background", control,
861                                 // "CheckBox.foreground", controlText,
862                                 // "CheckBox.border", radioButtonBorder,
863                                 "CheckBox.margin",
864                                 twoInsets,
865                                 "CheckBox.textIconGap",
866                                 four,
867                                 "CheckBox.textShiftOffset",
868                                 zero,
869                                 // "CheckBox.icon", checkBoxIcon,
870                                 // "CheckBox.focusInputMap",
871                                 // new UIDefaults.LazyInputMap(new Object[] {
872                                 // "SPACE", "pressed",
873                                 // "released SPACE", "released"
874                                 // }),
875                                 // "FileChooser.useSystemExtensionHiding", Boolean.FALSE,
876
877                                 // *** ColorChooser
878                                 // "ColorChooser.font", dialogPlain12,
879                                 // "ColorChooser.background", control,
880                                 // "ColorChooser.foreground", controlText,
881                                 //
882                                 "ColorChooser.swatchesSwatchSize",
883                                 new Dimension(10, 10),
884                                 "ColorChooser.swatchesRecentSwatchSize",
885                                 new Dimension(10, 10),
886                                 "ColorChooser.swatchesDefaultRecentColor",
887                                 control,
888
889                                 // *** ComboBox
890                                 "ComboBox.font",
891                                 sansSerifPlain12,
892                                 "ComboBox.background",
893                                 window,
894                                 "ComboBox.foreground",
895                                 textText,
896                                 // "ComboBox.buttonBackground", control,
897                                 // "ComboBox.buttonShadow", controlShadow,
898                                 // "ComboBox.buttonDarkShadow", controlDkShadow,
899                                 // "ComboBox.buttonHighlight", controlLtHighlight,
900                                 // "ComboBox.selectionBackground", textHighlight,
901                                 // "ComboBox.selectionForeground", textHighlightText,
902                                 // "ComboBox.disabledBackground", control,
903                                 // "ComboBox.disabledForeground", textInactiveText,
904                                 "ComboBox.timeFactor",
905                                 oneThousand,
906                                 "ComboBox.isEnterSelectablePopup",
907                                 Boolean.FALSE,
908                                 // "ComboBox.ancestorInputMap",
909                                 // new UIDefaults.LazyInputMap(new Object[] {
910                                 // "ESCAPE", "hidePopup",
911                                 // "PAGE_UP", "pageUpPassThrough",
912                                 // "PAGE_DOWN", "pageDownPassThrough",
913                                 // "HOME", "homePassThrough",
914                                 // "END", "endPassThrough",
915                                 // "ENTER", "enterPressed"
916                                 // }),
917                                 //
918                                 // *** FileChooser
919
920                                 // "FileChooser.newFolderIcon", newFolderIcon,
921                                 // "FileChooser.upFolderIcon", upFolderIcon,
922                                 // "FileChooser.homeFolderIcon", homeFolderIcon,
923                                 // "FileChooser.detailsViewIcon", detailsViewIcon,
924                                 // "FileChooser.listViewIcon", listViewIcon,
925                                 "FileChooser.readOnly",
926                                 Boolean.FALSE,
927                                 // "FileChooser.usesSingleFilePane", Boolean.FALSE,
928                                 // "FileChooser.ancestorInputMap",
929                                 // new UIDefaults.LazyInputMap(new Object[] {
930                                 // "ESCAPE", "cancelSelection",
931                                 // "F5", "refresh",
932                                 // }),
933                                 //
934                                 // "FileView.directoryIcon", directoryIcon,
935                                 // "FileView.fileIcon", fileIcon,
936                                 // "FileView.computerIcon", computerIcon,
937                                 // "FileView.hardDriveIcon", hardDriveIcon,
938                                 // "FileView.floppyDriveIcon", floppyDriveIcon,
939
940                                 // *** InternalFrame
941                                 // "InternalFrame.titleFont", dialogBold12,
942                                 // "InternalFrame.borderColor", control,
943                                 // "InternalFrame.borderShadow", controlShadow,
944                                 // "InternalFrame.borderDarkShadow", controlDkShadow,
945                                 // "InternalFrame.borderHighlight", controlLtHighlight,
946                                 // "InternalFrame.borderLight", controlHighlight,
947                                 // "InternalFrame.border", internalFrameBorder,
948                                 // "InternalFrame.icon", SwingUtilities2.makeIcon(getClass(),
949                                 // BasicLookAndFeel.class,
950                                 // "icons/JavaCup16.png"),
951                                 //
952                                 // /* Default frame icons are undefined for Basic. */
953                                 // "InternalFrame.maximizeIcon",
954                                 // new SwingLazyValue(
955                                 // "jsjavax.swing.plaf.basic.BasicIconFactory",
956                                 // "createEmptyFrameIcon"),
957                                 // "InternalFrame.minimizeIcon",
958                                 // new SwingLazyValue(
959                                 // "jsjavax.swing.plaf.basic.BasicIconFactory",
960                                 // "createEmptyFrameIcon"),
961                                 // "InternalFrame.iconifyIcon",
962                                 // new SwingLazyValue(
963                                 // "jsjavax.swing.plaf.basic.BasicIconFactory",
964                                 // "createEmptyFrameIcon"),
965                                 // "InternalFrame.closeIcon",
966                                 // new SwingLazyValue(
967                                 // "jsjavax.swing.plaf.basic.BasicIconFactory",
968                                 // "createEmptyFrameIcon"),
969                                 // // InternalFrame Auditory Cue Mappings
970                                 // "InternalFrame.closeSound", null,
971                                 // "InternalFrame.maximizeSound", null,
972                                 // "InternalFrame.minimizeSound", null,
973                                 // "InternalFrame.restoreDownSound", null,
974                                 // "InternalFrame.restoreUpSound", null,
975                                 //
976                                 // "InternalFrame.activeTitleBackground", table.get("activeCaption"),
977                                 // "InternalFrame.activeTitleForeground",
978                                 // table.get("activeCaptionText"),
979                                 // "InternalFrame.inactiveTitleBackground",
980                                 // table.get("inactiveCaption"),
981                                 // "InternalFrame.inactiveTitleForeground",
982                                 // table.get("inactiveCaptionText"),
983                                 // "InternalFrame.windowBindings", new Object[] {
984                                 // "shift ESCAPE", "showSystemMenu",
985                                 // "ctrl SPACE", "showSystemMenu",
986                                 // "ESCAPE", "hideSystemMenu"},
987                                 //
988                                 // "InternalFrameTitlePane.iconifyButtonOpacity", Boolean.TRUE,
989                                 // "InternalFrameTitlePane.maximizeButtonOpacity", Boolean.TRUE,
990                                 // "InternalFrameTitlePane.closeButtonOpacity", Boolean.TRUE,
991
992                                 // "DesktopIcon.border", internalFrameBorder,
993                                 //
994                                 // "Desktop.minOnScreenInsets", threeInsets,
995                                 // "Desktop.background", table.get("desktop"),
996                                 // "Desktop.ancestorInputMap",
997                                 // new UIDefaults.LazyInputMap(new Object[] {
998                                 // "ctrl F5", "restore",
999                                 // "ctrl F4", "close",
1000                                 // "ctrl F7", "move",
1001                                 // "ctrl F8", "resize",
1002                                 // "RIGHT", "right",
1003                                 // "KP_RIGHT", "right",
1004                                 // "shift RIGHT", "shrinkRight",
1005                                 // "shift KP_RIGHT", "shrinkRight",
1006                                 // "LEFT", "left",
1007                                 // "KP_LEFT", "left",
1008                                 // "shift LEFT", "shrinkLeft",
1009                                 // "shift KP_LEFT", "shrinkLeft",
1010                                 // "UP", "up",
1011                                 // "KP_UP", "up",
1012                                 // "shift UP", "shrinkUp",
1013                                 // "shift KP_UP", "shrinkUp",
1014                                 // "DOWN", "down",
1015                                 // "KP_DOWN", "down",
1016                                 // "shift DOWN", "shrinkDown",
1017                                 // "shift KP_DOWN", "shrinkDown",
1018                                 // "ESCAPE", "escape",
1019                                 // "ctrl F9", "minimize",
1020                                 // "ctrl F10", "maximize",
1021                                 // "ctrl F6", "selectNextFrame",
1022                                 // "ctrl TAB", "selectNextFrame",
1023                                 // "ctrl alt F6", "selectNextFrame",
1024                                 // "shift ctrl alt F6", "selectPreviousFrame",
1025                                 // "ctrl F12", "navigateNext",
1026                                 // "shift ctrl F12", "navigatePrevious"
1027                                 // }),
1028
1029                                 // *** Label
1030                                 // "Label.font", dialogPlain12,
1031                                 // "Label.background", control,
1032                                 // "Label.foreground", controlText,
1033                                 // "Label.disabledForeground", white,
1034                                 // "Label.disabledShadow", controlShadow,
1035                                 "Label.border",
1036                                 null,
1037
1038                                 // *** List
1039                                 // "List.font", dialogPlain12,
1040                                 "List.background",
1041                                 window,
1042                                 "List.foreground",
1043                                 textText,
1044                                 // "List.selectionBackground", textHighlight,
1045                                 // "List.selectionForeground", textHighlightText,
1046                                 // "List.noFocusBorder", noFocusBorder,
1047                                 // "List.focusCellHighlightBorder", focusCellHighlightBorder,
1048                                 // "List.dropLineColor", controlShadow,
1049                                 // "List.border", null,
1050                                 "List.cellRenderer",
1051                                 listCellRendererActiveValue,
1052                                 "List.timeFactor",
1053                                 oneThousand,
1054                                 // "List.focusInputMap",
1055                                 // new UIDefaults.LazyInputMap(new Object[] {
1056                                 // "ctrl C", "copy",
1057                                 // "ctrl V", "paste",
1058                                 // "ctrl X", "cut",
1059                                 // "COPY", "copy",
1060                                 // "PASTE", "paste",
1061                                 // "CUT", "cut",
1062                                 // "control INSERT", "copy",
1063                                 // "shift INSERT", "paste",
1064                                 // "shift DELETE", "cut",
1065                                 // "UP", "selectPreviousRow",
1066                                 // "KP_UP", "selectPreviousRow",
1067                                 // "shift UP", "selectPreviousRowExtendSelection",
1068                                 // "shift KP_UP", "selectPreviousRowExtendSelection",
1069                                 // "ctrl shift UP", "selectPreviousRowExtendSelection",
1070                                 // "ctrl shift KP_UP", "selectPreviousRowExtendSelection",
1071                                 // "ctrl UP", "selectPreviousRowChangeLead",
1072                                 // "ctrl KP_UP", "selectPreviousRowChangeLead",
1073                                 // "DOWN", "selectNextRow",
1074                                 // "KP_DOWN", "selectNextRow",
1075                                 // "shift DOWN", "selectNextRowExtendSelection",
1076                                 // "shift KP_DOWN", "selectNextRowExtendSelection",
1077                                 // "ctrl shift DOWN", "selectNextRowExtendSelection",
1078                                 // "ctrl shift KP_DOWN", "selectNextRowExtendSelection",
1079                                 // "ctrl DOWN", "selectNextRowChangeLead",
1080                                 // "ctrl KP_DOWN", "selectNextRowChangeLead",
1081                                 // "LEFT", "selectPreviousColumn",
1082                                 // "KP_LEFT", "selectPreviousColumn",
1083                                 // "shift LEFT", "selectPreviousColumnExtendSelection",
1084                                 // "shift KP_LEFT", "selectPreviousColumnExtendSelection",
1085                                 // "ctrl shift LEFT", "selectPreviousColumnExtendSelection",
1086                                 // "ctrl shift KP_LEFT", "selectPreviousColumnExtendSelection",
1087                                 // "ctrl LEFT", "selectPreviousColumnChangeLead",
1088                                 // "ctrl KP_LEFT", "selectPreviousColumnChangeLead",
1089                                 // "RIGHT", "selectNextColumn",
1090                                 // "KP_RIGHT", "selectNextColumn",
1091                                 // "shift RIGHT", "selectNextColumnExtendSelection",
1092                                 // "shift KP_RIGHT", "selectNextColumnExtendSelection",
1093                                 // "ctrl shift RIGHT", "selectNextColumnExtendSelection",
1094                                 // "ctrl shift KP_RIGHT", "selectNextColumnExtendSelection",
1095                                 // "ctrl RIGHT", "selectNextColumnChangeLead",
1096                                 // "ctrl KP_RIGHT", "selectNextColumnChangeLead",
1097                                 // "HOME", "selectFirstRow",
1098                                 // "shift HOME", "selectFirstRowExtendSelection",
1099                                 // "ctrl shift HOME", "selectFirstRowExtendSelection",
1100                                 // "ctrl HOME", "selectFirstRowChangeLead",
1101                                 // "END", "selectLastRow",
1102                                 // "shift END", "selectLastRowExtendSelection",
1103                                 // "ctrl shift END", "selectLastRowExtendSelection",
1104                                 // "ctrl END", "selectLastRowChangeLead",
1105                                 // "PAGE_UP", "scrollUp",
1106                                 // "shift PAGE_UP", "scrollUpExtendSelection",
1107                                 // "ctrl shift PAGE_UP", "scrollUpExtendSelection",
1108                                 // "ctrl PAGE_UP", "scrollUpChangeLead",
1109                                 // "PAGE_DOWN", "scrollDown",
1110                                 // "shift PAGE_DOWN", "scrollDownExtendSelection",
1111                                 // "ctrl shift PAGE_DOWN", "scrollDownExtendSelection",
1112                                 // "ctrl PAGE_DOWN", "scrollDownChangeLead",
1113                                 // "ctrl A", "selectAll",
1114                                 // "ctrl SLASH", "selectAll",
1115                                 // "ctrl BACK_SLASH", "clearSelection",
1116                                 // "SPACE", "addToSelection",
1117                                 // "ctrl SPACE", "toggleAndAnchor",
1118                                 // "shift SPACE", "extendTo",
1119                                 // "ctrl shift SPACE", "moveSelectionTo"
1120                                 // }),
1121                                 // "List.focusInputMap.RightToLeft",
1122                                 // new UIDefaults.LazyInputMap(new Object[] {
1123                                 // "LEFT", "selectNextColumn",
1124                                 // "KP_LEFT", "selectNextColumn",
1125                                 // "shift LEFT", "selectNextColumnExtendSelection",
1126                                 // "shift KP_LEFT", "selectNextColumnExtendSelection",
1127                                 // "ctrl shift LEFT", "selectNextColumnExtendSelection",
1128                                 // "ctrl shift KP_LEFT", "selectNextColumnExtendSelection",
1129                                 // "ctrl LEFT", "selectNextColumnChangeLead",
1130                                 // "ctrl KP_LEFT", "selectNextColumnChangeLead",
1131                                 // "RIGHT", "selectPreviousColumn",
1132                                 // "KP_RIGHT", "selectPreviousColumn",
1133                                 // "shift RIGHT", "selectPreviousColumnExtendSelection",
1134                                 // "shift KP_RIGHT", "selectPreviousColumnExtendSelection",
1135                                 // "ctrl shift RIGHT", "selectPreviousColumnExtendSelection",
1136                                 // "ctrl shift KP_RIGHT", "selectPreviousColumnExtendSelection",
1137                                 // "ctrl RIGHT", "selectPreviousColumnChangeLead",
1138                                 // "ctrl KP_RIGHT", "selectPreviousColumnChangeLead",
1139                                 // }),
1140                                 //
1141                                 // *** Menus
1142                           "MenuBar.font", 
1143                           dialogPlain12,
1144                                 "MenuBar.background",
1145                                 menu,
1146                                 "MenuBar.foreground",
1147                                 menuText,
1148                                 // "MenuBar.shadow", controlShadow,
1149                                 // "MenuBar.highlight", controlLtHighlight,
1150                                 // "MenuBar.border", menuBarBorder,
1151                                 // "MenuBar.windowBindings", new Object[] {
1152                                 // "F10", "takeFocus" },
1153                                 //
1154                                 "MenuItem.font", dialogPlain12,
1155                                 //"MenuItem.acceleratorFont", dialogPlain12,
1156                                 "MenuItem.background",
1157                                 menu,
1158                                 "MenuItem.foreground",
1159                                 menuText,
1160                                 // "MenuItem.selectionForeground", textHighlightText,
1161                                 // "MenuItem.selectionBackground", textHighlight,
1162                                 // "MenuItem.disabledForeground", null,
1163                                 // "MenuItem.acceleratorForeground", menuText,
1164                                 // "MenuItem.acceleratorSelectionForeground", textHighlightText,
1165                                 // "MenuItem.acceleratorDelimiter", menuItemAcceleratorDelimiter,
1166                                 // "MenuItem.border", marginBorder,
1167                                 // "MenuItem.borderPainted", Boolean.FALSE,
1168                                 "MenuItem.margin",
1169                                 twoInsets,
1170                                 // "MenuItem.checkIcon", menuItemCheckIcon,
1171                                 // "MenuItem.arrowIcon", menuItemArrowIcon,
1172                                 // "MenuItem.commandSound", null,
1173                                 //
1174                           "RadioButtonMenuItem.font", dialogPlain12,
1175                                 // "RadioButtonMenuItem.acceleratorFont", dialogPlain12,
1176                                 "RadioButtonMenuItem.background",
1177                                 menu,
1178                                 "RadioButtonMenuItem.foreground",
1179                                 menuText,
1180                                 // "RadioButtonMenuItem.selectionForeground", textHighlightText,
1181                                 // "RadioButtonMenuItem.selectionBackground", textHighlight,
1182                                 // "RadioButtonMenuItem.disabledForeground", null,
1183                                 // "RadioButtonMenuItem.acceleratorForeground", menuText,
1184                                 // "RadioButtonMenuItem.acceleratorSelectionForeground",
1185                                 // textHighlightText,
1186                                 // "RadioButtonMenuItem.border", marginBorder,
1187                                 // "RadioButtonMenuItem.borderPainted", Boolean.FALSE,
1188                                 "RadioButtonMenuItem.margin",
1189                                 twoInsets,
1190                                 // "RadioButtonMenuItem.checkIcon", radioButtonMenuItemIcon,
1191                                 // "RadioButtonMenuItem.arrowIcon", menuItemArrowIcon,
1192                                 // "RadioButtonMenuItem.commandSound", null,
1193
1194                          "CheckBoxMenuItem.font", dialogPlain12,
1195                                 // "CheckBoxMenuItem.acceleratorFont", dialogPlain12,
1196                                 "CheckBoxMenuItem.background",
1197                                 menu,
1198                                 "CheckBoxMenuItem.foreground",
1199                                 menuText,
1200                                 // "CheckBoxMenuItem.selectionForeground", textHighlightText,
1201                                 // "CheckBoxMenuItem.selectionBackground", textHighlight,
1202                                 // "CheckBoxMenuItem.disabledForeground", null,
1203                                 // "CheckBoxMenuItem.acceleratorForeground", menuText,
1204                                 // "CheckBoxMenuItem.acceleratorSelectionForeground", textHighlightText,
1205                                 // "CheckBoxMenuItem.border", marginBorder,
1206                                 // "CheckBoxMenuItem.borderPainted", Boolean.FALSE,
1207                                 "CheckBoxMenuItem.margin",
1208                                 twoInsets,
1209                                 // "CheckBoxMenuItem.checkIcon", checkBoxMenuItemIcon,
1210                                 // "CheckBoxMenuItem.arrowIcon", menuItemArrowIcon,
1211                                 // "CheckBoxMenuItem.commandSound", null,
1212
1213                                 // "Menu.font", dialogPlain12,
1214                                 // "Menu.acceleratorFont", dialogPlain12,
1215                                 "Menu.background",
1216                                 menu,
1217                                 "Menu.foreground",
1218                                 menuText,
1219                                 // "Menu.selectionForeground", textHighlightText,
1220                                 // "Menu.selectionBackground", textHighlight,
1221                                 // "Menu.disabledForeground", null,
1222                                 // "Menu.acceleratorForeground", menuText,
1223                                 // "Menu.acceleratorSelectionForeground", textHighlightText,
1224                                 // "Menu.border", marginBorder,
1225                                 // "Menu.borderPainted", Boolean.FALSE,
1226                                 "Menu.margin",
1227                                 twoInsets,
1228                                 // "Menu.checkIcon", menuItemCheckIcon,
1229                                 // "Menu.arrowIcon", menuArrowIcon,
1230                                 // "Menu.menuPopupOffsetX", new Integer(0),
1231                                 // "Menu.menuPopupOffsetY", new Integer(0),
1232                                 // "Menu.submenuPopupOffsetX", new Integer(0),
1233                                 // "Menu.submenuPopupOffsetY", new Integer(0),
1234                                 // "Menu.shortcutKeys", new int[] {KeyEvent.ALT_MASK},
1235                                 // "Menu.crossMenuMnemonic", Boolean.TRUE,
1236                                 // Menu.cancelMode affects the cancel menu action behaviour;
1237                                 // currently supports:
1238                                 // "hideLastSubmenu" (default)
1239                                 // hides the last open submenu,
1240                                 // and move selection one step back
1241                                 // "hideMenuTree"
1242                                 // resets selection and
1243                                 // hide the entire structure of open menu and its submenus
1244                                 // "Menu.cancelMode", "hideLastSubmenu",
1245
1246                                 // Menu.preserveTopLevelSelection affects
1247                                 // the cancel menu action behaviour
1248                                 // if set to true then top level menu selection
1249                                 // will be preserved when the last popup was cancelled;
1250                                 // the menu itself will be unselect with the next cancel action
1251                                 // "Menu.preserveTopLevelSelection", Boolean.FALSE,
1252
1253                                 // PopupMenu
1254                                 // "PopupMenu.font", dialogPlain12,
1255                                 "PopupMenu.background",
1256                                 menu,
1257                                 "PopupMenu.foreground",
1258                                 menuText,
1259                                 // "PopupMenu.border", popupMenuBorder,
1260                                 // Internal Frame Auditory Cue Mappings
1261                                 // "PopupMenu.popupSound", null,
1262                                 // // These window InputMap bindings are used when the Menu is
1263                                 // // selected.
1264                                 // "PopupMenu.selectedWindowInputMapBindings", new Object[] {
1265                                 // "ESCAPE", "cancel",
1266                                 // "DOWN", "selectNext",
1267                                 // "KP_DOWN", "selectNext",
1268                                 // "UP", "selectPrevious",
1269                                 // "KP_UP", "selectPrevious",
1270                                 // "LEFT", "selectParent",
1271                                 // "KP_LEFT", "selectParent",
1272                                 // "RIGHT", "selectChild",
1273                                 // "KP_RIGHT", "selectChild",
1274                                 // "ENTER", "return",
1275                                 // "ctrl ENTER", "return",
1276                                 // "SPACE", "return"
1277                                 // },
1278                                 // "PopupMenu.selectedWindowInputMapBindings.RightToLeft", new Object[]
1279                                 // {
1280                                 // "LEFT", "selectChild",
1281                                 // "KP_LEFT", "selectChild",
1282                                 // "RIGHT", "selectParent",
1283                                 // "KP_RIGHT", "selectParent",
1284                                 // },
1285                                 "PopupMenu.consumeEventOnClose",
1286                                 Boolean.FALSE,
1287
1288                                 // *** OptionPane
1289                                 // You can additionaly define OptionPane.messageFont which will
1290                                 // dictate the fonts used for the message, and
1291                                 // OptionPane.buttonFont, which defines the font for the buttons.
1292                                 // "OptionPane.font", dialogPlain12,
1293                                 // "OptionPane.background", control,
1294                                 // "OptionPane.foreground", controlText,
1295                                 "OptionPane.messageForeground",
1296                                 controlText,
1297                                 // "OptionPane.border", optionPaneBorder,
1298                                 // "OptionPane.messageAreaBorder", zeroBorder,
1299                                 // "OptionPane.buttonAreaBorder", optionPaneButtonAreaBorder,
1300                                 // "OptionPane.minimumSize", optionPaneMinimumSize,
1301                                 // "OptionPane.errorIcon", SwingUtilities2.makeIcon(getClass(),
1302                                 // BasicLookAndFeel.class,
1303                                 // "icons/Error.gif"),
1304                                 // "OptionPane.informationIcon", SwingUtilities2.makeIcon(getClass(),
1305                                 // BasicLookAndFeel.class,
1306                                 // "icons/Inform.gif"),
1307                                 // "OptionPane.warningIcon", SwingUtilities2.makeIcon(getClass(),
1308                                 // BasicLookAndFeel.class,
1309                                 // "icons/Warn.gif"),
1310                                 // "OptionPane.questionIcon", SwingUtilities2.makeIcon(getClass(),
1311                                 // BasicLookAndFeel.class,
1312                                 // "icons/Question.gif"),
1313                                 // "OptionPane.windowBindings", new Object[] {
1314                                 // "ESCAPE", "close" },
1315                                 // // OptionPane Auditory Cue Mappings
1316                                 // "OptionPane.errorSound", null,
1317                                 // "OptionPane.informationSound", null, // Info and Plain
1318                                 // "OptionPane.questionSound", null,
1319                                 // "OptionPane.warningSound", null,
1320                                 // "OptionPane.buttonClickThreshhold", fiveHundred,
1321
1322                                 // *** Panel
1323                                  "Panel.font", 
1324                                  dialogPlain12,
1325                                  "Panel.background", 
1326                                  control,
1327                                  "Panel.foreground",
1328                textText,
1329
1330                                 // *** ProgressBar
1331                                 // "ProgressBar.font", dialogPlain12,
1332                                 // "ProgressBar.foreground", textHighlight,
1333                                 // "ProgressBar.background", control,
1334                                 // "ProgressBar.selectionForeground", control,
1335                                 // "ProgressBar.selectionBackground", textHighlight,
1336                                 // "ProgressBar.border", progressBarBorder,
1337                                 "ProgressBar.cellLength",
1338                                 new Integer(1),
1339                                 "ProgressBar.cellSpacing",
1340                                 zero,
1341                                 "ProgressBar.repaintInterval",
1342                                 new Integer(50),
1343                                 "ProgressBar.cycleTime",
1344                                 new Integer(3000),
1345                                 "ProgressBar.horizontalSize",
1346                                 new DimensionUIResource(146, 12),
1347                                 "ProgressBar.verticalSize",
1348                                 new DimensionUIResource(12, 146),
1349
1350                                 // *** Separator
1351                                 // "Separator.shadow", controlShadow, // DEPRECATED - DO NOT USE!
1352                                 // "Separator.highlight", controlLtHighlight, // DEPRECATED - DO NOT
1353                                 // USE!
1354                                 //
1355                                 // "Separator.background", controlLtHighlight,
1356                                 // "Separator.foreground", controlShadow,
1357
1358                                 // *** ScrollBar/ScrollPane/Viewport
1359                                 // "ScrollBar.background", scrollBarTrack,
1360                                 "ScrollBar.foreground",
1361                                 control,
1362                                 // "ScrollBar.track", table.get("scrollbar"),
1363                                 // "ScrollBar.trackHighlight", controlDkShadow,
1364                                 // "ScrollBar.thumb", control,
1365                                 // "ScrollBar.thumbHighlight", controlLtHighlight,
1366                                 // "ScrollBar.thumbDarkShadow", controlDkShadow,
1367                                 // "ScrollBar.thumbShadow", controlShadow,
1368                                 // "ScrollBar.border", null,
1369                                 // "ScrollBar.minimumThumbSize", minimumThumbSize,
1370                                 // "ScrollBar.maximumThumbSize", maximumThumbSize,
1371                                 // "ScrollBar.ancestorInputMap",
1372                                 // new UIDefaults.LazyInputMap(new Object[] {
1373                                 // "RIGHT", "positiveUnitIncrement",
1374                                 // "KP_RIGHT", "positiveUnitIncrement",
1375                                 // "DOWN", "positiveUnitIncrement",
1376                                 // "KP_DOWN", "positiveUnitIncrement",
1377                                 // "PAGE_DOWN", "positiveBlockIncrement",
1378                                 // "LEFT", "negativeUnitIncrement",
1379                                 // "KP_LEFT", "negativeUnitIncrement",
1380                                 // "UP", "negativeUnitIncrement",
1381                                 // "KP_UP", "negativeUnitIncrement",
1382                                 // "PAGE_UP", "negativeBlockIncrement",
1383                                 // "HOME", "minScroll",
1384                                 // "END", "maxScroll"
1385                                 // }),
1386                                 // "ScrollBar.ancestorInputMap.RightToLeft",
1387                                 // new UIDefaults.LazyInputMap(new Object[] {
1388                                 // "RIGHT", "negativeUnitIncrement",
1389                                 // "KP_RIGHT", "negativeUnitIncrement",
1390                                 // "LEFT", "positiveUnitIncrement",
1391                                 // "KP_LEFT", "positiveUnitIncrement",
1392                                 // }),
1393                                 "ScrollBar.width",
1394                                 new Integer(16),
1395
1396                                 // "ScrollPane.font", dialogPlain12,
1397                                 // "ScrollPane.background", control,
1398                                 // "ScrollPane.foreground", controlText,
1399                                 // "ScrollPane.border", textFieldBorder,
1400                                 // "ScrollPane.viewportBorder", null,
1401                                 // "ScrollPane.ancestorInputMap",
1402                                 // new UIDefaults.LazyInputMap(new Object[] {
1403                                 // "RIGHT", "unitScrollRight",
1404                                 // "KP_RIGHT", "unitScrollRight",
1405                                 // "DOWN", "unitScrollDown",
1406                                 // "KP_DOWN", "unitScrollDown",
1407                                 // "LEFT", "unitScrollLeft",
1408                                 // "KP_LEFT", "unitScrollLeft",
1409                                 // "UP", "unitScrollUp",
1410                                 // "KP_UP", "unitScrollUp",
1411                                 // "PAGE_UP", "scrollUp",
1412                                 // "PAGE_DOWN", "scrollDown",
1413                                 // "ctrl PAGE_UP", "scrollLeft",
1414                                 // "ctrl PAGE_DOWN", "scrollRight",
1415                                 // "ctrl HOME", "scrollHome",
1416                                 // "ctrl END", "scrollEnd"
1417                                 // }),
1418                                 // "ScrollPane.ancestorInputMap.RightToLeft",
1419                                 // new UIDefaults.LazyInputMap(new Object[] {
1420                                 // "ctrl PAGE_UP", "scrollRight",
1421                                 // "ctrl PAGE_DOWN", "scrollLeft",
1422                                 // }),
1423                                 //
1424                                 // "Viewport.font", dialogPlain12,
1425                                 // "Viewport.background", control,
1426                                 "Viewport.foreground",
1427                                 textText,
1428
1429                                 // *** Slider
1430                                 // "Slider.font", dialogPlain12,
1431                                 // "Slider.foreground", control,
1432                                 // "Slider.background", control,
1433                                 // "Slider.highlight", controlLtHighlight,
1434                                 // "Slider.tickColor", Color.black,
1435                                 // "Slider.shadow", controlShadow,
1436                                 // "Slider.focus", controlDkShadow,
1437                                 // "Slider.border", null,
1438                                 "Slider.horizontalSize",
1439                                 new Dimension(200, 21),
1440                                 "Slider.verticalSize",
1441                                 new Dimension(21, 200),
1442                                 "Slider.minimumHorizontalSize",
1443                                 new Dimension(36, 21),
1444                                 "Slider.minimumVerticalSize",
1445                                 new Dimension(21, 36),
1446                                 // "Slider.focusInsets", sliderFocusInsets,
1447                                 // "Slider.focusInputMap",
1448                                 // new UIDefaults.LazyInputMap(new Object[] {
1449                                 // "RIGHT", "positiveUnitIncrement",
1450                                 // "KP_RIGHT", "positiveUnitIncrement",
1451                                 // "DOWN", "negativeUnitIncrement",
1452                                 // "KP_DOWN", "negativeUnitIncrement",
1453                                 // "PAGE_DOWN", "negativeBlockIncrement",
1454                                 // "LEFT", "negativeUnitIncrement",
1455                                 // "KP_LEFT", "negativeUnitIncrement",
1456                                 // "UP", "positiveUnitIncrement",
1457                                 // "KP_UP", "positiveUnitIncrement",
1458                                 // "PAGE_UP", "positiveBlockIncrement",
1459                                 // "HOME", "minScroll",
1460                                 // "END", "maxScroll"
1461                                 // }),
1462                                 // "Slider.focusInputMap.RightToLeft",
1463                                 // new UIDefaults.LazyInputMap(new Object[] {
1464                                 // "RIGHT", "negativeUnitIncrement",
1465                                 // "KP_RIGHT", "negativeUnitIncrement",
1466                                 // "LEFT", "positiveUnitIncrement",
1467                                 // "KP_LEFT", "positiveUnitIncrement",
1468                                 // }),
1469                                 //
1470                                 // *** Spinner
1471                                 "Spinner.font",
1472                                 monospacedPlain12,
1473                                 // "Spinner.background", control,
1474                                 // "Spinner.foreground", control,
1475                                 // "Spinner.border", textFieldBorder,
1476                                 // "Spinner.arrowButtonBorder", null,
1477                                 // "Spinner.arrowButtonInsets", null,
1478                                 "Spinner.arrowButtonSize",
1479                                 new Dimension(16, 5),
1480                                 // "Spinner.ancestorInputMap",
1481                                 // new UIDefaults.LazyInputMap(new Object[] {
1482                                 // "UP", "increment",
1483                                 // "KP_UP", "increment",
1484                                 // "DOWN", "decrement",
1485                                 // "KP_DOWN", "decrement",
1486                                 // }),
1487                                 // "Spinner.editorBorderPainted", Boolean.FALSE,
1488                                 "Spinner.editorAlignment",
1489                                 JTextField.TRAILING,
1490
1491                                 // *** SplitPane
1492                                 "SplitPane.background",
1493                                 control,
1494                                 // "SplitPane.highlight", controlLtHighlight,
1495                                 // "SplitPane.shadow", controlShadow,
1496                                 // "SplitPane.darkShadow", controlDkShadow,
1497                                 // "SplitPane.border", splitPaneBorder,
1498                                 "SplitPane.dividerSize",
1499                                 new Integer(7),
1500                                 // "SplitPaneDivider.border", splitPaneDividerBorder,
1501                                 "SplitPaneDivider.draggingColor",
1502                                 darkGray,
1503                                 // "SplitPane.ancestorInputMap",
1504                                 // new UIDefaults.LazyInputMap(new Object[] {
1505                                 // "UP", "negativeIncrement",
1506                                 // "DOWN", "positiveIncrement",
1507                                 // "LEFT", "negativeIncrement",
1508                                 // "RIGHT", "positiveIncrement",
1509                                 // "KP_UP", "negativeIncrement",
1510                                 // "KP_DOWN", "positiveIncrement",
1511                                 // "KP_LEFT", "negativeIncrement",
1512                                 // "KP_RIGHT", "positiveIncrement",
1513                                 // "HOME", "selectMin",
1514                                 // "END", "selectMax",
1515                                 // "F8", "startResize",
1516                                 // "F6", "toggleFocus",
1517                                 // "ctrl TAB", "focusOutForward",
1518                                 // "ctrl shift TAB", "focusOutBackward"
1519                                 // }),
1520                                 //
1521                                 // *** TabbedPane
1522                                 // "TabbedPane.font", dialogPlain12,
1523                                 // "TabbedPane.background", control,
1524                                 // "TabbedPane.foreground", controlText,
1525                                 // "TabbedPane.highlight", controlLtHighlight,
1526                                 // "TabbedPane.light", controlHighlight,
1527                                 // "TabbedPane.shadow", controlShadow,
1528                                 // "TabbedPane.darkShadow", controlDkShadow,
1529                                 "TabbedPane.selected",
1530                                 null,
1531                                 // "TabbedPane.focus", controlText,
1532                                 "TabbedPane.textIconGap",
1533                                 four,
1534
1535                                 // Causes tabs to be painted on top of the content area border.
1536                                 // The amount of overlap is then controlled by tabAreaInsets.bottom,
1537                                 // which is zero by default
1538                                 "TabbedPane.tabsOverlapBorder",
1539                                 Boolean.FALSE,
1540                                 // "TabbedPane.selectionFollowsFocus", Boolean.TRUE,
1541
1542                                 "TabbedPane.labelShift",
1543                                 1,
1544                                 "TabbedPane.selectedLabelShift",
1545                                 -1,
1546                                 "TabbedPane.tabInsets",
1547                                 tabbedPaneTabInsets,
1548                                 "TabbedPane.selectedTabPadInsets",
1549                                 tabbedPaneTabPadInsets,
1550                                 "TabbedPane.tabAreaInsets",
1551                                 tabbedPaneTabAreaInsets,
1552                                 "TabbedPane.contentBorderInsets",
1553                                 tabbedPaneContentBorderInsets,
1554                                 "TabbedPane.tabRunOverlay",
1555                                 new Integer(2),
1556                                 // "TabbedPane.tabsOpaque", Boolean.TRUE,
1557                                 // "TabbedPane.contentOpaque", Boolean.TRUE,
1558                                 // "TabbedPane.focusInputMap",
1559                                 // new UIDefaults.LazyInputMap(new Object[] {
1560                                 // "RIGHT", "navigateRight",
1561                                 // "KP_RIGHT", "navigateRight",
1562                                 // "LEFT", "navigateLeft",
1563                                 // "KP_LEFT", "navigateLeft",
1564                                 // "UP", "navigateUp",
1565                                 // "KP_UP", "navigateUp",
1566                                 // "DOWN", "navigateDown",
1567                                 // "KP_DOWN", "navigateDown",
1568                                 // "ctrl DOWN", "requestFocusForVisibleComponent",
1569                                 // "ctrl KP_DOWN", "requestFocusForVisibleComponent",
1570                                 // }),
1571                                 // "TabbedPane.ancestorInputMap",
1572                                 // new UIDefaults.LazyInputMap(new Object[] {
1573                                 // "ctrl PAGE_DOWN", "navigatePageDown",
1574                                 // "ctrl PAGE_UP", "navigatePageUp",
1575                                 // "ctrl UP", "requestFocus",
1576                                 // "ctrl KP_UP", "requestFocus",
1577                                 // }),
1578                                 //
1579                                 //
1580                                 // *** Table
1581                                 // "Table.font", dialogPlain12,
1582                                 // "Table.foreground", controlText, // cell text color
1583                                 "Table.background",
1584                                 window, // cell background color
1585                                 // "Table.selectionForeground", textHighlightText,
1586                                 // "Table.selectionBackground", textHighlight,
1587                                 // "Table.dropLineColor", controlShadow,
1588                                 "Table.dropLineShortColor",
1589                                 black,
1590                                 "Table.gridColor",
1591                                 gray, // grid line color
1592                                 "Table.focusCellBackground",
1593                                 window,
1594                                 "Table.focusCellForeground",
1595                                 controlText,
1596                                 // "Table.focusCellHighlightBorder", focusCellHighlightBorder,
1597                                 // "Table.scrollPaneBorder", loweredBevelBorder,
1598                                 // "Table.ancestorInputMap",
1599                                 // new UIDefaults.LazyInputMap(new Object[] {
1600                                 // "ctrl C", "copy",
1601                                 // "ctrl V", "paste",
1602                                 // "ctrl X", "cut",
1603                                 // "COPY", "copy",
1604                                 // "PASTE", "paste",
1605                                 // "CUT", "cut",
1606                                 // "control INSERT", "copy",
1607                                 // "shift INSERT", "paste",
1608                                 // "shift DELETE", "cut",
1609                                 // "RIGHT", "selectNextColumn",
1610                                 // "KP_RIGHT", "selectNextColumn",
1611                                 // "shift RIGHT", "selectNextColumnExtendSelection",
1612                                 // "shift KP_RIGHT", "selectNextColumnExtendSelection",
1613                                 // "ctrl shift RIGHT", "selectNextColumnExtendSelection",
1614                                 // "ctrl shift KP_RIGHT", "selectNextColumnExtendSelection",
1615                                 // "ctrl RIGHT", "selectNextColumnChangeLead",
1616                                 // "ctrl KP_RIGHT", "selectNextColumnChangeLead",
1617                                 // "LEFT", "selectPreviousColumn",
1618                                 // "KP_LEFT", "selectPreviousColumn",
1619                                 // "shift LEFT", "selectPreviousColumnExtendSelection",
1620                                 // "shift KP_LEFT", "selectPreviousColumnExtendSelection",
1621                                 // "ctrl shift LEFT", "selectPreviousColumnExtendSelection",
1622                                 // "ctrl shift KP_LEFT", "selectPreviousColumnExtendSelection",
1623                                 // "ctrl LEFT", "selectPreviousColumnChangeLead",
1624                                 // "ctrl KP_LEFT", "selectPreviousColumnChangeLead",
1625                                 // "DOWN", "selectNextRow",
1626                                 // "KP_DOWN", "selectNextRow",
1627                                 // "shift DOWN", "selectNextRowExtendSelection",
1628                                 // "shift KP_DOWN", "selectNextRowExtendSelection",
1629                                 // "ctrl shift DOWN", "selectNextRowExtendSelection",
1630                                 // "ctrl shift KP_DOWN", "selectNextRowExtendSelection",
1631                                 // "ctrl DOWN", "selectNextRowChangeLead",
1632                                 // "ctrl KP_DOWN", "selectNextRowChangeLead",
1633                                 // "UP", "selectPreviousRow",
1634                                 // "KP_UP", "selectPreviousRow",
1635                                 // "shift UP", "selectPreviousRowExtendSelection",
1636                                 // "shift KP_UP", "selectPreviousRowExtendSelection",
1637                                 // "ctrl shift UP", "selectPreviousRowExtendSelection",
1638                                 // "ctrl shift KP_UP", "selectPreviousRowExtendSelection",
1639                                 // "ctrl UP", "selectPreviousRowChangeLead",
1640                                 // "ctrl KP_UP", "selectPreviousRowChangeLead",
1641                                 // "HOME", "selectFirstColumn",
1642                                 // "shift HOME", "selectFirstColumnExtendSelection",
1643                                 // "ctrl shift HOME", "selectFirstRowExtendSelection",
1644                                 // "ctrl HOME", "selectFirstRow",
1645                                 // "END", "selectLastColumn",
1646                                 // "shift END", "selectLastColumnExtendSelection",
1647                                 // "ctrl shift END", "selectLastRowExtendSelection",
1648                                 // "ctrl END", "selectLastRow",
1649                                 // "PAGE_UP", "scrollUpChangeSelection",
1650                                 // "shift PAGE_UP", "scrollUpExtendSelection",
1651                                 // "ctrl shift PAGE_UP", "scrollLeftExtendSelection",
1652                                 // "ctrl PAGE_UP", "scrollLeftChangeSelection",
1653                                 // "PAGE_DOWN", "scrollDownChangeSelection",
1654                                 // "shift PAGE_DOWN", "scrollDownExtendSelection",
1655                                 // "ctrl shift PAGE_DOWN", "scrollRightExtendSelection",
1656                                 // "ctrl PAGE_DOWN", "scrollRightChangeSelection",
1657                                 // "TAB", "selectNextColumnCell",
1658                                 // "shift TAB", "selectPreviousColumnCell",
1659                                 // "ENTER", "selectNextRowCell",
1660                                 // "shift ENTER", "selectPreviousRowCell",
1661                                 // "ctrl A", "selectAll",
1662                                 // "ctrl SLASH", "selectAll",
1663                                 // "ctrl BACK_SLASH", "clearSelection",
1664                                 // "ESCAPE", "cancel",
1665                                 // "F2", "startEditing",
1666                                 // "SPACE", "addToSelection",
1667                                 // "ctrl SPACE", "toggleAndAnchor",
1668                                 // "shift SPACE", "extendTo",
1669                                 // "ctrl shift SPACE", "moveSelectionTo",
1670                                 // "F8", "focusHeader"
1671                                 // }),
1672                                 // "Table.ancestorInputMap.RightToLeft",
1673                                 // new UIDefaults.LazyInputMap(new Object[] {
1674                                 // "RIGHT", "selectPreviousColumn",
1675                                 // "KP_RIGHT", "selectPreviousColumn",
1676                                 // "shift RIGHT", "selectPreviousColumnExtendSelection",
1677                                 // "shift KP_RIGHT", "selectPreviousColumnExtendSelection",
1678                                 // "ctrl shift RIGHT", "selectPreviousColumnExtendSelection",
1679                                 // "ctrl shift KP_RIGHT", "selectPreviousColumnExtendSelection",
1680                                 // "ctrl RIGHT", "selectPreviousColumnChangeLead",
1681                                 // "ctrl KP_RIGHT", "selectPreviousColumnChangeLead",
1682                                 // "LEFT", "selectNextColumn",
1683                                 // "KP_LEFT", "selectNextColumn",
1684                                 // "shift LEFT", "selectNextColumnExtendSelection",
1685                                 // "shift KP_LEFT", "selectNextColumnExtendSelection",
1686                                 // "ctrl shift LEFT", "selectNextColumnExtendSelection",
1687                                 // "ctrl shift KP_LEFT", "selectNextColumnExtendSelection",
1688                                 // "ctrl LEFT", "selectNextColumnChangeLead",
1689                                 // "ctrl KP_LEFT", "selectNextColumnChangeLead",
1690                                 // "ctrl PAGE_UP", "scrollRightChangeSelection",
1691                                 // "ctrl PAGE_DOWN", "scrollLeftChangeSelection",
1692                                 // "ctrl shift PAGE_UP", "scrollRightExtendSelection",
1693                                 // "ctrl shift PAGE_DOWN", "scrollLeftExtendSelection",
1694                                 // }),
1695                                 // "Table.ascendingSortIcon", new SwingLazyValue(
1696                                 // "sun.swing.icon.SortArrowIcon",
1697                                 // null, new Object[] { Boolean.TRUE,
1698                                 // "Table.sortIconColor" }),
1699                                 // "Table.descendingSortIcon", new SwingLazyValue(
1700                                 // "sun.swing.icon.SortArrowIcon",
1701                                 // null, new Object[] { Boolean.FALSE,
1702                                 // "Table.sortIconColor" }),
1703                                 // "Table.sortIconColor", controlShadow,
1704                                 //
1705                                 // "TableHeader.font", dialogPlain12,
1706                                 // "TableHeader.foreground", controlText, // header text color
1707                                 // "TableHeader.background", control, // header background
1708                                 // "TableHeader.cellBorder", tableHeaderBorder,
1709
1710                                 // Support for changing the background/border of the currently
1711                                 // selected header column when the header has the keyboard focus.
1712                                 // "TableHeader.focusCellBackground", table.getColor("text"), // like
1713                                 // text component bg
1714                                 // "TableHeader.focusCellForeground", null,
1715                                 // "TableHeader.focusCellBorder", null,
1716                                 // "TableHeader.ancestorInputMap",
1717                                 // new UIDefaults.LazyInputMap(new Object[] {
1718                                 // "SPACE", "toggleSortOrder",
1719                                 // "LEFT", "selectColumnToLeft",
1720                                 // "KP_LEFT", "selectColumnToLeft",
1721                                 // "RIGHT", "selectColumnToRight",
1722                                 // "KP_RIGHT", "selectColumnToRight",
1723                                 // "alt LEFT", "moveColumnLeft",
1724                                 // "alt KP_LEFT", "moveColumnLeft",
1725                                 // "alt RIGHT", "moveColumnRight",
1726                                 // "alt KP_RIGHT", "moveColumnRight",
1727                                 // "alt shift LEFT", "resizeLeft",
1728                                 // "alt shift KP_LEFT", "resizeLeft",
1729                                 // "alt shift RIGHT", "resizeRight",
1730                                 // "alt shift KP_RIGHT", "resizeRight",
1731                                 // "ESCAPE", "focusTable",
1732                                 // }),
1733                                 //
1734                                 // *** Text
1735                                 "TextField.font",
1736                                 sansSerifPlain12,
1737                                 "TextField.background",
1738                                 window,
1739                                 "TextField.foreground",
1740                                 textText,
1741                                 // "TextField.shadow", controlShadow,
1742                                 // "TextField.darkShadow", controlDkShadow,
1743                                 // "TextField.light", controlHighlight,
1744                                 // "TextField.highlight", controlLtHighlight,
1745                                 // "TextField.inactiveForeground", textInactiveText,
1746                                 // "TextField.inactiveBackground", control,
1747                                 // "TextField.selectionBackground", textHighlight,
1748                                 // "TextField.selectionForeground", textHighlightText,
1749                                 // "TextField.caretForeground", textText,
1750                                 // "TextField.caretBlinkRate", caretBlinkRate,
1751                                 // "TextField.border", textFieldBorder,
1752                                 "TextField.margin",
1753                                 zeroInsets,
1754
1755                                 "FormattedTextField.font",
1756                                 sansSerifPlain12,
1757                                 "FormattedTextField.background",
1758                                 window,
1759                                 "FormattedTextField.foreground",
1760                                 textText,
1761                                 // "FormattedTextField.inactiveForeground", textInactiveText,
1762                                 // "FormattedTextField.inactiveBackground", control,
1763                                 // "FormattedTextField.selectionBackground", textHighlight,
1764                                 // "FormattedTextField.selectionForeground", textHighlightText,
1765                                 "FormattedTextField.caretForeground",
1766                                 textText,
1767                                 // "FormattedTextField.caretBlinkRate", caretBlinkRate,
1768                                 // "FormattedTextField.border", textFieldBorder,
1769                                 "FormattedTextField.margin",
1770                                 zeroInsets,
1771                                 // "FormattedTextField.focusInputMap",
1772                                 // new UIDefaults.LazyInputMap(new Object[] {
1773                                 // "ctrl C", DefaultEditorKit.copyAction,
1774                                 // "ctrl V", DefaultEditorKit.pasteAction,
1775                                 // "ctrl X", DefaultEditorKit.cutAction,
1776                                 // "COPY", DefaultEditorKit.copyAction,
1777                                 // "PASTE", DefaultEditorKit.pasteAction,
1778                                 // "CUT", DefaultEditorKit.cutAction,
1779                                 // "control INSERT", DefaultEditorKit.copyAction,
1780                                 // "shift INSERT", DefaultEditorKit.pasteAction,
1781                                 // "shift DELETE", DefaultEditorKit.cutAction,
1782                                 // "shift LEFT", DefaultEditorKit.selectionBackwardAction,
1783                                 // "shift KP_LEFT", DefaultEditorKit.selectionBackwardAction,
1784                                 // "shift RIGHT", DefaultEditorKit.selectionForwardAction,
1785                                 // "shift KP_RIGHT", DefaultEditorKit.selectionForwardAction,
1786                                 // "ctrl LEFT", DefaultEditorKit.previousWordAction,
1787                                 // "ctrl KP_LEFT", DefaultEditorKit.previousWordAction,
1788                                 // "ctrl RIGHT", DefaultEditorKit.nextWordAction,
1789                                 // "ctrl KP_RIGHT", DefaultEditorKit.nextWordAction,
1790                                 // "ctrl shift LEFT", DefaultEditorKit.selectionPreviousWordAction,
1791                                 // "ctrl shift KP_LEFT", DefaultEditorKit.selectionPreviousWordAction,
1792                                 // "ctrl shift RIGHT", DefaultEditorKit.selectionNextWordAction,
1793                                 // "ctrl shift KP_RIGHT", DefaultEditorKit.selectionNextWordAction,
1794                                 // "ctrl A", DefaultEditorKit.selectAllAction,
1795                                 // "HOME", DefaultEditorKit.beginLineAction,
1796                                 // "END", DefaultEditorKit.endLineAction,
1797                                 // "shift HOME", DefaultEditorKit.selectionBeginLineAction,
1798                                 // "shift END", DefaultEditorKit.selectionEndLineAction,
1799                                 // "BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
1800                                 // "shift BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
1801                                 // "ctrl H", DefaultEditorKit.deletePrevCharAction,
1802                                 // "DELETE", DefaultEditorKit.deleteNextCharAction,
1803                                 // "ctrl DELETE", DefaultEditorKit.deleteNextWordAction,
1804                                 // "ctrl BACK_SPACE", DefaultEditorKit.deletePrevWordAction,
1805                                 // "RIGHT", DefaultEditorKit.forwardAction,
1806                                 // "LEFT", DefaultEditorKit.backwardAction,
1807                                 // "KP_RIGHT", DefaultEditorKit.forwardAction,
1808                                 // "KP_LEFT", DefaultEditorKit.backwardAction,
1809                                 // "ENTER", JTextField.notifyAction,
1810                                 // "ctrl BACK_SLASH", "unselect",
1811                                 // "control shift O", "toggle-componentOrientation",
1812                                 // "ESCAPE", "reset-field-edit",
1813                                 // "UP", "increment",
1814                                 // "KP_UP", "increment",
1815                                 // "DOWN", "decrement",
1816                                 // "KP_DOWN", "decrement",
1817                                 // }),
1818                                 //
1819                                 "PasswordField.font",
1820                                 monospacedPlain12,
1821                                 "PasswordField.background",
1822                                 window,
1823                                 "PasswordField.foreground",
1824                                 textText,
1825                                 // "PasswordField.inactiveForeground", textInactiveText,
1826                                 // "PasswordField.inactiveBackground", control,
1827                                 // "PasswordField.selectionBackground", textHighlight,
1828                                 // "PasswordField.selectionForeground", textHighlightText,
1829                                 // "PasswordField.caretForeground", textText,
1830                                 // "PasswordField.caretBlinkRate", caretBlinkRate,
1831                                 // "PasswordField.border", textFieldBorder,
1832                                 "PasswordField.margin",
1833                                 zeroInsets,
1834                                 "PasswordField.echoChar",
1835                                 '*',
1836
1837                                 "TextArea.font",
1838                                 monospacedPlain12,
1839                                 "TextArea.background",
1840                                 window,
1841                                 "TextArea.foreground",
1842                                 textText,
1843                                 // "TextArea.inactiveForeground", textInactiveText,
1844                                 // "TextArea.selectionBackground", textHighlight,
1845                                 // "TextArea.selectionForeground", textHighlightText,
1846                                 // "TextArea.caretForeground", textText,
1847                                 // "TextArea.caretBlinkRate", caretBlinkRate,
1848                                 // "TextArea.border", marginBorder,
1849                                 "TextArea.margin",
1850                                 zeroInsets,
1851
1852                                 "TextPane.font",
1853                                 serifPlain12,
1854                                 "TextPane.background",
1855                                 white,
1856                                 "TextPane.foreground",
1857                                 textText,
1858                                 // "TextPane.selectionBackground", textHighlight,
1859                                 // "TextPane.selectionForeground", textHighlightText,
1860                                 // "TextPane.caretForeground", textText,
1861                                 // "TextPane.caretBlinkRate", caretBlinkRate,
1862                                 // "TextPane.inactiveForeground", textInactiveText,
1863                                 // "TextPane.border", marginBorder,
1864                                 "TextPane.margin",
1865                                 editorMargin,
1866
1867                                 "EditorPane.font",
1868                                 serifPlain12,
1869                                 "EditorPane.background",
1870                                 white,
1871                                 "EditorPane.foreground",
1872                                 textText,
1873                                 // "EditorPane.selectionBackground", textHighlight,
1874                                 // "EditorPane.selectionForeground", textHighlightText,
1875                                 // "EditorPane.caretForeground", textText,
1876                                 // "EditorPane.caretBlinkRate", caretBlinkRate,
1877                                 // "EditorPane.inactiveForeground", textInactiveText,
1878                                 // "EditorPane.border", marginBorder,
1879                                 "EditorPane.margin",
1880                                 editorMargin,
1881                                 //
1882                                 // "html.pendingImage", SwingUtilities2.makeIcon(getClass(),
1883                                 // BasicLookAndFeel.class,
1884                                 // "icons/image-delayed.png"),
1885                                 // "html.missingImage", SwingUtilities2.makeIcon(getClass(),
1886                                 // BasicLookAndFeel.class,
1887                                 // "icons/image-failed.png"),
1888                                 // *** TitledBorder
1889                                 // "TitledBorder.font", dialogPlain12,
1890                                 "TitledBorder.titleColor",
1891                                 controlText,
1892                                 // "TitledBorder.border", etchedBorder,
1893
1894                                 // *** ToolBar
1895                                 // "ToolBar.font", dialogPlain12,
1896                                 // "ToolBar.background", control,
1897                                 // "ToolBar.foreground", controlText,
1898                                 // "ToolBar.shadow", controlShadow,
1899                                 // "ToolBar.darkShadow", controlDkShadow,
1900                                 // "ToolBar.light", controlHighlight,
1901                                 // "ToolBar.highlight", controlLtHighlight,
1902                                 // "ToolBar.dockingBackground", control,
1903                                 // "ToolBar.dockingForeground", red,
1904                                 // "ToolBar.floatingBackground", control,
1905                                 // "ToolBar.floatingForeground", darkGray,
1906                                 // "ToolBar.border", etchedBorder,
1907                                 // "ToolBar.separatorSize", toolBarSeparatorSize,
1908                                 // "ToolBar.ancestorInputMap",
1909                                 // new UIDefaults.LazyInputMap(new Object[] {
1910                                 // "UP", "navigateUp",
1911                                 // "KP_UP", "navigateUp",
1912                                 // "DOWN", "navigateDown",
1913                                 // "KP_DOWN", "navigateDown",
1914                                 // "LEFT", "navigateLeft",
1915                                 // "KP_LEFT", "navigateLeft",
1916                                 // "RIGHT", "navigateRight",
1917                                 // "KP_RIGHT", "navigateRight"
1918                                 // }),
1919
1920                                 // *** ToolTips
1921                                 // "ToolTip.font", sansSerifPlain12,
1922                                 // "ToolTip.background", table.get("info"),
1923                                 // "ToolTip.foreground", table.get("infoText"),
1924                                 // "ToolTip.border", blackLineBorder,
1925                                 // ToolTips also support backgroundInactive, borderInactive,
1926                                 // and foregroundInactive
1927
1928                                 // *** ToolTipManager
1929                                 // ToolTipManager.enableToolTipMode currently supports:
1930                                 // "allWindows" (default):
1931                                 // enables tool tips for all windows of all java applications,
1932                                 // whether the windows are active or inactive
1933                                 // "activeApplication"
1934                                 // enables tool tips for windows of an application only when
1935                                 // the application has an active window
1936                                 // "ToolTipManager.enableToolTipMode", "allWindows",
1937
1938                                 // *** Tree
1939                                 "Tree.paintLines",
1940                                 Boolean.TRUE,
1941                                 "Tree.lineTypeDashed",
1942                                 Boolean.FALSE,
1943                                 // "Tree.font", dialogPlain12,
1944                                 "Tree.background",
1945                                 window,
1946                                 "Tree.foreground",
1947                                 textText,
1948                                 "Tree.hash",
1949                                 gray,
1950                                 "Tree.textForeground",
1951                                 textText,
1952                                 "Tree.textBackground",
1953                                 table.get("text"),
1954                                 // "Tree.selectionForeground", textHighlightText,
1955                                 // "Tree.selectionBackground", textHighlight,
1956                                 // "Tree.selectionBorderColor", black,
1957                                 // "Tree.dropLineColor", controlShadow,
1958                                 // "Tree.editorBorder", blackLineBorder,
1959                                 "Tree.leftChildIndent", new Integer(7), "Tree.rightChildIndent",
1960                                 new Integer(13), "Tree.rowHeight", new Integer(16),
1961                                 "Tree.scrollsOnExpand", Boolean.TRUE,
1962                                 // "Tree.openIcon", SwingUtilities2.makeIcon(getClass(),
1963                                 // BasicLookAndFeel.class,
1964                                 // "icons/TreeOpen.gif"),
1965                                 // "Tree.closedIcon", SwingUtilities2.makeIcon(getClass(),
1966                                 // BasicLookAndFeel.class,
1967                                 // "icons/TreeClosed.gif"),
1968                                 // "Tree.leafIcon", SwingUtilities2.makeIcon(getClass(),
1969                                 // BasicLookAndFeel.class,
1970                                 // "icons/TreeLeaf.gif"),
1971                                 // "Tree.expandedIcon", null,
1972                                 // "Tree.collapsedIcon", null,
1973                                 // "Tree.changeSelectionWithFocus", Boolean.TRUE,
1974                                 // "Tree.drawsFocusBorderAroundIcon", Boolean.FALSE,
1975                                 "Tree.timeFactor", oneThousand,
1976                 // "Tree.focusInputMap",
1977                 // new UIDefaults.LazyInputMap(new Object[] {
1978                 // "ctrl C", "copy",
1979                 // "ctrl V", "paste",
1980                 // "ctrl X", "cut",
1981                 // "COPY", "copy",
1982                 // "PASTE", "paste",
1983                 // "CUT", "cut",
1984                 // "control INSERT", "copy",
1985                 // "shift INSERT", "paste",
1986                 // "shift DELETE", "cut",
1987                 // "UP", "selectPrevious",
1988                 // "KP_UP", "selectPrevious",
1989                 // "shift UP", "selectPreviousExtendSelection",
1990                 // "shift KP_UP", "selectPreviousExtendSelection",
1991                 // "ctrl shift UP", "selectPreviousExtendSelection",
1992                 // "ctrl shift KP_UP", "selectPreviousExtendSelection",
1993                 // "ctrl UP", "selectPreviousChangeLead",
1994                 // "ctrl KP_UP", "selectPreviousChangeLead",
1995                 // "DOWN", "selectNext",
1996                 // "KP_DOWN", "selectNext",
1997                 // "shift DOWN", "selectNextExtendSelection",
1998                 // "shift KP_DOWN", "selectNextExtendSelection",
1999                 // "ctrl shift DOWN", "selectNextExtendSelection",
2000                 // "ctrl shift KP_DOWN", "selectNextExtendSelection",
2001                 // "ctrl DOWN", "selectNextChangeLead",
2002                 // "ctrl KP_DOWN", "selectNextChangeLead",
2003                 // "RIGHT", "selectChild",
2004                 // "KP_RIGHT", "selectChild",
2005                 // "LEFT", "selectParent",
2006                 // "KP_LEFT", "selectParent",
2007                 // "PAGE_UP", "scrollUpChangeSelection",
2008                 // "shift PAGE_UP", "scrollUpExtendSelection",
2009                 // "ctrl shift PAGE_UP", "scrollUpExtendSelection",
2010                 // "ctrl PAGE_UP", "scrollUpChangeLead",
2011                 // "PAGE_DOWN", "scrollDownChangeSelection",
2012                 // "shift PAGE_DOWN", "scrollDownExtendSelection",
2013                 // "ctrl shift PAGE_DOWN", "scrollDownExtendSelection",
2014                 // "ctrl PAGE_DOWN", "scrollDownChangeLead",
2015                 // "HOME", "selectFirst",
2016                 // "shift HOME", "selectFirstExtendSelection",
2017                 // "ctrl shift HOME", "selectFirstExtendSelection",
2018                 // "ctrl HOME", "selectFirstChangeLead",
2019                 // "END", "selectLast",
2020                 // "shift END", "selectLastExtendSelection",
2021                 // "ctrl shift END", "selectLastExtendSelection",
2022                 // "ctrl END", "selectLastChangeLead",
2023                 // "F2", "startEditing",
2024                 // "ctrl A", "selectAll",
2025                 // "ctrl SLASH", "selectAll",
2026                 // "ctrl BACK_SLASH", "clearSelection",
2027                 // "ctrl LEFT", "scrollLeft",
2028                 // "ctrl KP_LEFT", "scrollLeft",
2029                 // "ctrl RIGHT", "scrollRight",
2030                 // "ctrl KP_RIGHT", "scrollRight",
2031                 // "SPACE", "addToSelection",
2032                 // "ctrl SPACE", "toggleAndAnchor",
2033                 // "shift SPACE", "extendTo",
2034                 // "ctrl shift SPACE", "moveSelectionTo"
2035                 // }),
2036                 // "Tree.focusInputMap.RightToLeft",
2037                 // new UIDefaults.LazyInputMap(new Object[] {
2038                 // "RIGHT", "selectParent",
2039                 // "KP_RIGHT", "selectParent",
2040                 // "LEFT", "selectChild",
2041                 // "KP_LEFT", "selectChild",
2042                 // }),
2043                 // "Tree.ancestorInputMap",
2044                 // new UIDefaults.LazyInputMap(new Object[] {
2045                 // "ESCAPE", "cancel"
2046                 // }),
2047                 // // Bind specific keys that can invoke popup on currently
2048                 // // focused JComponent
2049                 // "RootPane.ancestorInputMap",
2050                 // new UIDefaults.LazyInputMap(new Object[] {
2051                 // "shift F10", "postPopup",
2052                 // "CONTEXT_MENU", "postPopup"
2053                 // }),
2054                 //
2055                 // // These bindings are only enabled when there is a default
2056                 // // button set on the rootpane.
2057                 // "RootPane.defaultButtonWindowKeyBindings", new Object[] {
2058                 // "ENTER", "press",
2059                 // "released ENTER", "release",
2060                 // "ctrl ENTER", "press",
2061                 // "ctrl released ENTER", "release"
2062                 // },
2063                 };
2064
2065                 table.putDefaults(defaults);
2066         }
2067
2068         // /**
2069         // * Returns the ui that is of type <code>klass</code>, or null if
2070         // * one can not be found.
2071         // */
2072         // static Object getUIOfType(ComponentUI ui, Class klass) {
2073         // if (klass.isInstance(ui)) {
2074         // return ui;
2075         // }
2076         // return null;
2077         // }
2078         //
2079         // // ********* Auditory Cue support methods and objects *********
2080         // // also see the "AuditoryCues" section of the defaults table
2081         //
2082         // /**
2083         // * Returns an <code>ActionMap</code> containing the audio actions
2084         // * for this look and feel.
2085         // * <P>
2086         // * The returned <code>ActionMap</code> contains <code>Actions</code> that
2087         // * embody the ability to render an auditory cue. These auditory
2088         // * cues map onto user and system activities that may be useful
2089         // * for an end user to know about (such as a dialog box appearing).
2090         // * <P>
2091         // * At the appropriate time,
2092         // * the {@code ComponentUI} is responsible for obtaining an
2093         // * <code>Action</code> out of the <code>ActionMap</code> and passing
2094         // * it to <code>playSound</code>.
2095         // * <P>
2096         // * This method first looks up the {@code ActionMap} from the
2097         // * defaults using the key {@code "AuditoryCues.actionMap"}.
2098         // * <p>
2099         // * If the value is {@code non-null}, it is returned. If the value
2100         // * of the default {@code "AuditoryCues.actionMap"} is {@code null}
2101         // * and the value of the default {@code "AuditoryCues.cueList"} is
2102         // * {@code non-null}, an {@code ActionMapUIResource} is created and
2103         // * populated. Population is done by iterating over each of the
2104         // * elements of the {@code "AuditoryCues.cueList"} array, and
2105         // * invoking {@code createAudioAction()} to create an {@code
2106         // * Action} for each element. The resulting {@code Action} is
2107         // * placed in the {@code ActionMapUIResource}, using the array
2108         // * element as the key. For example, if the {@code
2109         // * "AuditoryCues.cueList"} array contains a single-element, {@code
2110         // * "audioKey"}, the {@code ActionMapUIResource} is created, then
2111         // * populated by way of {@code actionMap.put(cueList[0],
2112         // * createAudioAction(cueList[0]))}.
2113         // * <p>
2114         // * If the value of the default {@code "AuditoryCues.actionMap"} is
2115         // * {@code null} and the value of the default
2116         // * {@code "AuditoryCues.cueList"} is {@code null}, an empty
2117         // * {@code ActionMapUIResource} is created.
2118         // *
2119         // *
2120         // * @return an ActionMap containing {@code Actions}
2121         // * responsible for playing auditory cues
2122         // * @throws ClassCastException if the value of the
2123         // * default {@code "AuditoryCues.actionMap"} is not an
2124         // * {@code ActionMap}, or the value of the default
2125         // * {@code "AuditoryCues.cueList"} is not an {@code Object[]}
2126         // * @see #createAudioAction
2127         // * @see #playSound(Action)
2128         // * @since 1.4
2129         // */
2130         // protected ActionMap getAudioActionMap() {
2131         // ActionMap audioActionMap = (ActionMap)UIManager.get(
2132         // "AuditoryCues.actionMap");
2133         // if (audioActionMap == null) {
2134         // Object[] acList = (Object[])UIManager.get("AuditoryCues.cueList");
2135         // if (acList != null) {
2136         // audioActionMap = new ActionMapUIResource();
2137         // for(int counter = acList.length-1; counter >= 0; counter--) {
2138         // audioActionMap.put(acList[counter],
2139         // createAudioAction(acList[counter]));
2140         // }
2141         // }
2142         // UIManager.getLookAndFeelDefaults().put("AuditoryCues.actionMap",
2143         // audioActionMap);
2144         // }
2145         // return audioActionMap;
2146         // }
2147         //
2148         // /**
2149         // * Creates and returns an {@code Action} used to play a sound.
2150         // * <p>
2151         // * If {@code key} is {@code non-null}, an {@code Action} is created
2152         // * using the value from the defaults with key {@code key}. The value
2153         // * identifies the sound resource to load when
2154         // * {@code actionPerformed} is invoked on the {@code Action}. The
2155         // * sound resource is loaded into a {@code byte[]} by way of
2156         // * {@code getClass().getResourceAsStream()}.
2157         // *
2158         // * @param key the key identifying the audio action
2159         // * @return an {@code Action} used to play the source, or {@code null}
2160         // * if {@code key} is {@code null}
2161         // * @see #playSound(Action)
2162         // * @since 1.4
2163         // */
2164         // protected Action createAudioAction(Object key) {
2165         // if (key != null) {
2166         // String audioKey = (String)key;
2167         // String audioValue = (String)UIManager.get(key);
2168         // return new AudioAction(audioKey, audioValue);
2169         // } else {
2170         // return null;
2171         // }
2172         // }
2173         //
2174         // /**
2175         // * Pass the name String to the super constructor. This is used
2176         // * later to identify the Action and decide whether to play it or
2177         // * not. Store the resource String. I is used to get the audio
2178         // * resource. In this case, the resource is an audio file.
2179         // *
2180         // * @since 1.4
2181         // */
2182         // private class AudioAction extends AbstractAction implements LineListener {
2183         // // We strive to only play one sound at a time (other platforms
2184         // // appear to do this). This is done by maintaining the field
2185         // // clipPlaying. Every time a sound is to be played,
2186         // // cancelCurrentSound is invoked to cancel any sound that may be
2187         // // playing.
2188         // private String audioResource;
2189         // private byte[] audioBuffer;
2190         //
2191         // /**
2192         // * The String is the name of the Action and
2193         // * points to the audio resource.
2194         // * The byte[] is a buffer of the audio bits.
2195         // */
2196         // public AudioAction(String name, String resource) {
2197         // super(name);
2198         // audioResource = resource;
2199         // }
2200         //
2201         // public void actionPerformed(ActionEvent e) {
2202         // if (audioBuffer == null) {
2203         // audioBuffer = loadAudioData(audioResource);
2204         // }
2205         // if (audioBuffer != null) {
2206         // cancelCurrentSound(null);
2207         // try {
2208         // AudioInputStream soundStream =
2209         // AudioSystem.getAudioInputStream(
2210         // new ByteArrayInputStream(audioBuffer));
2211         // DataLine.Info info =
2212         // new DataLine.Info(Clip.class, soundStream.getFormat());
2213         // Clip clip = (Clip) AudioSystem.getLine(info);
2214         // clip.open(soundStream);
2215         // clip.addLineListener(this);
2216         //
2217         // synchronized(audioLock) {
2218         // clipPlaying = clip;
2219         // }
2220         //
2221         // clip.start();
2222         // } catch (Exception ex) {}
2223         // }
2224         // }
2225         //
2226         // public void update(LineEvent event) {
2227         // if (event.getType() == LineEvent.Type.STOP) {
2228         // cancelCurrentSound((Clip)event.getLine());
2229         // }
2230         // }
2231         //
2232         // /**
2233         // * If the parameter is null, or equal to the currently
2234         // * playing sound, then cancel the currently playing sound.
2235         // */
2236         // private void cancelCurrentSound(Clip clip) {
2237         // Clip lastClip = null;
2238         //
2239         // synchronized(audioLock) {
2240         // if (clip == null || clip == clipPlaying) {
2241         // lastClip = clipPlaying;
2242         // clipPlaying = null;
2243         // }
2244         // }
2245         //
2246         // if (lastClip != null) {
2247         // lastClip.removeLineListener(this);
2248         // lastClip.close();
2249         // }
2250         // }
2251         // }
2252         //
2253         // /**
2254         // * Utility method that loads audio bits for the specified
2255         // * <code>soundFile</code> filename. If this method is unable to
2256         // * build a viable path name from the <code>baseClass</code> and
2257         // * <code>soundFile</code> passed into this method, it will
2258         // * return <code>null</code>.
2259         // *
2260         // * @param baseClass used as the root class/location to get the
2261         // * soundFile from
2262         // * @param soundFile the name of the audio file to be retrieved
2263         // * from disk
2264         // * @return A byte[] with audio data or null
2265         // * @since 1.4
2266         // */
2267         // private byte[] loadAudioData(final String soundFile){
2268         // if (soundFile == null) {
2269         // return null;
2270         // }
2271         // /* Copy resource into a byte array. This is
2272         // * necessary because several browsers consider
2273         // * Class.getResource a security risk since it
2274         // * can be used to load additional classes.
2275         // * Class.getResourceAsStream just returns raw
2276         // * bytes, which we can convert to a sound.
2277         // */
2278         // byte[] buffer = (byte[])AccessController.doPrivileged(
2279         // new PrivilegedAction() {
2280         // public Object run() {
2281         // try {
2282         // InputStream resource = BasicLookAndFeel.this.
2283         // getClass().getResourceAsStream(soundFile);
2284         // if (resource == null) {
2285         // return null;
2286         // }
2287         // BufferedInputStream in =
2288         // new BufferedInputStream(resource);
2289         // ByteArrayOutputStream out =
2290         // new ByteArrayOutputStream(1024);
2291         // byte[] buffer = new byte[1024];
2292         // int n;
2293         // while ((n = in.read(buffer)) > 0) {
2294         // out.write(buffer, 0, n);
2295         // }
2296         // in.close();
2297         // out.flush();
2298         // buffer = out.toByteArray();
2299         // return buffer;
2300         // } catch (IOException ioe) {
2301         // System.err.println(ioe.toString());
2302         // return null;
2303         // }
2304         // }
2305         // });
2306         // if (buffer == null) {
2307         // System.err.println(getClass().getName() + "/" +
2308         // soundFile + " not found.");
2309         // return null;
2310         // }
2311         // if (buffer.length == 0) {
2312         // System.err.println("warning: " + soundFile +
2313         // " is zero-length");
2314         // return null;
2315         // }
2316         // return buffer;
2317         // }
2318         //
2319         // /**
2320         // * If necessary, invokes {@code actionPerformed} on
2321         // * {@code audioAction} to play a sound.
2322         // * The {@code actionPerformed} method is invoked if the value of
2323         // * the {@code "AuditoryCues.playList"} default is a {@code
2324         // * non-null} {@code Object[]} containing a {@code String} entry
2325         // * equal to the name of the {@code audioAction}.
2326         // *
2327         // * @param audioAction an Action that knows how to render the audio
2328         // * associated with the system or user activity
2329         // * that is occurring; a value of {@code null}, is
2330         // * ignored
2331         // * @throws ClassCastException if {@code audioAction} is {@code non-null}
2332         // * and the value of the default {@code "AuditoryCues.playList"}
2333         // * is not an {@code Object[]}
2334         // * @since 1.4
2335         // */
2336         // protected void playSound(Action audioAction) {
2337         // if (audioAction != null) {
2338         // Object[] audioStrings = (Object[])
2339         // UIManager.get("AuditoryCues.playList");
2340         // if (audioStrings != null) {
2341         // // create a HashSet to help us decide to play or not
2342         // HashSet audioCues = new HashSet();
2343         // for (int i = 0; i < audioStrings.length; i++) {
2344         // audioCues.add(audioStrings[i]);
2345         // }
2346         // // get the name of the Action
2347         // String actionName = (String)audioAction.getValue(Action.NAME);
2348         // // if the actionName is in the audioCues HashSet, play it.
2349         // if (audioCues.contains(actionName)) {
2350         // audioAction.actionPerformed(new
2351         // ActionEvent(this, ActionEvent.ACTION_PERFORMED,
2352         // actionName));
2353         // }
2354         // }
2355         // }
2356         // }
2357         //
2358         //
2359         // /**
2360         // * Sets the parent of the passed in ActionMap to be the audio action
2361         // * map.
2362         // */
2363         // static void installAudioActionMap(ActionMap map) {
2364         // LookAndFeel laf = UIManager.getLookAndFeel();
2365         // if (laf instanceof BasicLookAndFeel) {
2366         // map.setParent(((BasicLookAndFeel)laf).getAudioActionMap());
2367         // }
2368         // }
2369         //
2370         //
2371         // /**
2372         // * Helper method to play a named sound.
2373         // *
2374         // * @param c JComponent to play the sound for.
2375         // * @param actionKey Key for the sound.
2376         // */
2377         // static void playSound(JComponent c, Object actionKey) {
2378         // LookAndFeel laf = UIManager.getLookAndFeel();
2379         // if (laf instanceof BasicLookAndFeel) {
2380         // ActionMap map = c.getActionMap();
2381         // if (map != null) {
2382         // Action audioAction = map.get(actionKey);
2383         // if (audioAction != null) {
2384         // // pass off firing the Action to a utility method
2385         // ((BasicLookAndFeel)laf).playSound(audioAction);
2386         // }
2387         // }
2388         // }
2389         // }
2390         //
2391         // /**
2392         // * This class contains listener that watches for all the mouse
2393         // * events that can possibly invoke popup on the component
2394         // */
2395         // class AWTEventHelper implements AWTEventListener,PrivilegedAction {
2396         // AWTEventHelper() {
2397         // super();
2398         // AccessController.doPrivileged(this);
2399         // }
2400         //
2401         // public Object run() {
2402         // Toolkit tk = Toolkit.getDefaultToolkit();
2403         // if(invocator == null) {
2404         // tk.addAWTEventListener(this, AWTEvent.MOUSE_EVENT_MASK);
2405         // } else {
2406         // tk.removeAWTEventListener(invocator);
2407         // }
2408         // // Return value not used.
2409         // return null;
2410         // }
2411         //
2412         // public void eventDispatched(AWTEvent ev) {
2413         // int eventID = ev.getID();
2414         // if((eventID & AWTEvent.MOUSE_EVENT_MASK) != 0) {
2415         // MouseEvent me = (MouseEvent) ev;
2416         // if(me.isPopupTrigger()) {
2417         // MenuElement[] elems = MenuSelectionManager
2418         // .defaultManager()
2419         // .getSelectedPath();
2420         // if(elems != null && elems.length != 0) {
2421         // return;
2422         // // We shall not interfere with already opened menu
2423         // }
2424         // Object c = me.getSource();
2425         // JComponent src = null;
2426         // if(c instanceof JComponent) {
2427         // src = (JComponent) c;
2428         // } else if(c instanceof BasicSplitPaneDivider) {
2429         // // Special case - if user clicks on divider we must
2430         // // invoke popup from the SplitPane
2431         // src = (JComponent)
2432         // ((BasicSplitPaneDivider)c).getParent();
2433         // }
2434         // if(src != null) {
2435         // if(src.getComponentPopupMenu() != null) {
2436         // Point pt = src.getPopupLocation(me);
2437         // if(pt == null) {
2438         // pt = me.getPoint();
2439         // pt = SwingUtilities.convertPoint((Component)c,
2440         // pt, src);
2441         // }
2442         // src.getComponentPopupMenu().show(src, pt.x, pt.y);
2443         // me.consume();
2444         // }
2445         // }
2446         // }
2447         // }
2448         // /* Activate a JInternalFrame if necessary. */
2449         // if (eventID == MouseEvent.MOUSE_PRESSED) {
2450         // Object object = ev.getSource();
2451         // if (!(object instanceof Component)) {
2452         // return;
2453         // }
2454         // Component component = (Component)object;
2455         // if (component != null) {
2456         // Component parent = component;
2457         // while (parent != null && !(parent instanceof Window)) {
2458         // if (parent instanceof JInternalFrame) {
2459         // // Activate the frame.
2460         // try { ((JInternalFrame)parent).setSelected(true); }
2461         // catch (PropertyVetoException e1) { }
2462         // }
2463         // parent = parent.getParent();
2464         // }
2465         // }
2466         // }
2467         // }
2468         // }
2469         //
2470         @Override
2471         public String getName() {
2472                 return "SwingJS";
2473         }
2474
2475         @Override
2476         public String getID() {
2477                 return "SwingJS";
2478         }
2479
2480         @Override
2481         public String getDescription() {
2482                 return "SwingJS L&F";
2483         }
2484
2485         @Override
2486         public boolean isNativeLookAndFeel() {
2487                 return true;
2488         }
2489
2490         @Override
2491         public boolean isSupportedLookAndFeel() {
2492                 return true;
2493         }
2494 }