David Gilbert wrote:

David Gilbert wrote:

Roman Kennke wrote:

Am Dienstag, den 23.08.2005, 13:27 +0000 schrieb David Gilbert:
This patch does two things primarily:

(1) corrects a problem where every call to "get" a default value ends up calling the getDefaults() method in the current LookAndFeel, which *creates* a new table of defaults each time it is called (the API docs say it should only be called once - a better name for the method would be createDefaults()). The solution is to retain a reference to the UIDefaults for the current look and feel, and use that reference in getLookAndFeelDefaults() (and change all the get methods to use getLookAndFeelDefaults());



Sounds reasonable.

(2) implements the property change mechanism in UIManager using the SwingPropertyChangeSupport class.



Dito.

I've also added API doc comments. If the patch is too messy, I'll take some more time to split it into the relevant pieces.



I think many people prefer to have documentation changes and code
changes separate. It would be nice to have this split up. Besides that,
please go ahead and commit.


/Roman

OK, I've committed the first part that implements the property change listener mechanism:

2005-08-23  David Gilbert  <[EMAIL PROTECTED]>

   * javax/swing/UIManager.java:
   (addPropertyChangeListener): implemented,
   (removePropertyChangeListener): likewise,
   (getPropertyChangeListeners): likewise,
   (setLookAndFeel): fire a property change event.

More to follow.

Regards,

Dave Gilbert


Here is the second part (committed) that caches the UIDefaults from the current look and feel when it is first set:

2005-08-23  David Gilbert  <[EMAIL PROTECTED]>

   * javax/swing/UIManager.java:
   (look_and_feel): renamed currentLookAndFeel,
   (currentUIDefaults): new field,
   (get(Object)): access cached UIDefaults,
   (get(Object, Locale)): likewise,
   (getBoolean(Object)): likewise,
   (getBoolean(Object, Locale)): likewise,
   (getBorder(Object)): likewise,
   (getBorder(Object, Locale)): likewise,
   (getColor(Object)): likewise,
   (getColor(Object, Locale)): likewise,
(getDefaults): return reference to UIDefaults from current look and
   feel rather than recreating them every time,
   (getDimension(Object)): access local defaults,
   (getDimension(Object, Locale)): likewise,
   (getFont(Object)): likewise,
   (getFont(Object, Locale)): likewise,
   (getIcon(Object)): likewise,
   (getIcon(Object, Locale)): likewise,
   (getInsets(Object)): likewise,
   (getInsets(Object, Locale)): likewise,
   (getInt(Object)): likewise,
   (getInt(Object, Locale)): likewise,
       (getLookAndFeel): renamed attribute,
   (getLookAndFeelDefaults): return reference to UIDefaults from current
   look and feel rather than recreating them every time,
   (getString(Object)): access local defaults,
   (getString(Object, Locale)): likewise,
   (getUI(JComponent)): likewise,
   (installLookAndFeel(String, String)): implemented by delegation,
   (put(Object, Object)): update local defaults,
   (setLookAndFeel): create and retain reference to UIDefaults.

Regards,

Dave

Here is the third part (committed) of the patch - it is the API doc additions:

2005-08-23  David Gilbert  <[EMAIL PROTECTED]>

   * javax/swing/UIManager.java: added API docs all over.

One more to follow.

Regards,

Dave Gilbert
Index: javax/swing/UIManager.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/UIManager.java,v
retrieving revision 1.24
diff -u -r1.24 UIManager.java
--- javax/swing/UIManager.java  23 Aug 2005 14:55:27 -0000      1.24
+++ javax/swing/UIManager.java  23 Aug 2005 15:08:54 -0000
@@ -51,12 +51,27 @@
 import javax.swing.plaf.ComponentUI;
 import javax.swing.plaf.metal.MetalLookAndFeel;
 
+/**
+ * Manages the current [EMAIL PROTECTED] LookAndFeel} and any auxiliary [EMAIL 
PROTECTED] LookAndFeel}
+ * instances.
+ */
 public class UIManager implements Serializable
 {
+  /**
+   * Represents the basic information about a [EMAIL PROTECTED] LookAndFeel} 
(LAF), so 
+   * that a list of installed LAFs can be presented without actually loading 
+   * the LAF class(es).
+   */
   public static class LookAndFeelInfo
   {
     String name, clazz;
        
+    /**
+     * Creates a new instance.
+     * 
+     * @param name  the look and feel name.
+     * @param clazz  the look and feel class name.
+     */
     public LookAndFeelInfo(String name, 
                           String clazz)
     {
@@ -64,11 +79,21 @@
       this.clazz = clazz;
     }
 
+    /**
+     * Returns the name of the look and feel.
+     * 
+     * @return The name of the look and feel.
+     */
     public String getName()
     {
       return name;
     }
     
+    /**
+     * Returns the fully qualified class name for the [EMAIL PROTECTED] 
LookAndFeel}.
+     * 
+     * @return The fully qualified class name for the [EMAIL PROTECTED] 
LookAndFeel}.
+     */
     public String getClassName()
     {
       return clazz;
@@ -94,12 +119,15 @@
 
   private static final long serialVersionUID = -5547433830339189365L;
 
+  /** The installed look and feel(s). */
   static LookAndFeelInfo [] installed = {
-    new LookAndFeelInfo ("Metal", "javax.swing.plaf.metal.MetalLookAndFeel")
+    new LookAndFeelInfo("Metal", "javax.swing.plaf.metal.MetalLookAndFeel")
   };
 
+  /** The installed auxiliary look and feels. */
   static LookAndFeel[] aux_installed;
   
+  /** The current look and feel. */
   static LookAndFeel currentLookAndFeel;
   
   static UIDefaults currentUIDefaults;
@@ -131,6 +159,10 @@
 
   }
   
+  /**
+   * Creates a new instance of the <code>UIManager</code>.  There is no need
+   * to construct an instance of this class, since all methods are static.
+   */
   public UIManager()
   {
     // Do nothing here.
@@ -170,7 +202,13 @@
   }
 
   /**
-   * Add a LookAndFeel to the list of auxiliary look and feels.
+   * Add a [EMAIL PROTECTED] LookAndFeel} to the list of auxiliary look and 
feels.
+   * 
+   * @param laf  the auxiliary look and feel (<code>null</code> not permitted).
+   * 
+   * @throws NullPointerException if <code>laf</code> is <code>null</code>.
+   * 
+   * @see #getAuxiliaryLookAndFeels()
    */
   public static void addAuxiliaryLookAndFeel (LookAndFeel l)
   {
@@ -187,6 +225,14 @@
     aux_installed[aux_installed.length-1] = l;
   }
     
+  /**
+   * Removes a [EMAIL PROTECTED] LookAndFeel} (LAF) from the list of auxiliary 
LAFs.
+   * 
+   * @param laf  the LAF to remove.
+   * 
+   * @return <code>true</code> if the LAF was removed, and <code>false</code>
+   *         otherwise.
+   */
   public static boolean removeAuxiliaryLookAndFeel(LookAndFeel laf)
   {
     if (aux_installed == null)
@@ -206,16 +252,41 @@
     return false;
   }
 
+  /**
+   * Returns an array (possibly <code>null</code>) containing the auxiliary
+   * [EMAIL PROTECTED] LookAndFeel}s that are in use.  These are used by the 
+   * [EMAIL PROTECTED] javax.swing.plaf.multi.MultiLookAndFeel} class.
+   * 
+   * @return The auxiliary look and feels (possibly <code>null</code>).
+   * 
+   * @see #addAuxiliaryLookAndFeel(LookAndFeel)
+   */
   public static  LookAndFeel[] getAuxiliaryLookAndFeels()
   {
     return aux_installed;
   }
 
+  /**
+   * Returns an object from the [EMAIL PROTECTED] UIDefaults} table for the 
current
+   * [EMAIL PROTECTED] LookAndFeel}.
+   * 
+   * @param key  the key.
+   * 
+   * @return The object.
+   */
   public static Object get(Object key)
   {
     return getLookAndFeelDefaults().get(key);
   }
 
+  /**
+   * Returns an object from the [EMAIL PROTECTED] UIDefaults} table for the 
current
+   * [EMAIL PROTECTED] LookAndFeel}.
+   * 
+   * @param key  the key.
+   * 
+   * @return The object.
+   */
   public static Object get(Object key, Locale locale)
   {
     return getLookAndFeelDefaults().get(key ,locale);
@@ -280,7 +351,10 @@
   }
 
   /**
-   * this string can be passed to Class.forName()
+   * The fully qualified class name of the cross platform (Metal) look and 
feel.
+   * This string can be passed to Class.forName()
+   * 
+   * @return <code>"javax.swing.plaf.metal.MetalLookAndFeel"</code>
    */
   public static String getCrossPlatformLookAndFeelClassName()
   {    
@@ -289,6 +363,8 @@
 
   /**
    * Returns the default values for this look and feel. 
+   * 
+   * @return The [EMAIL PROTECTED] UIDefaults} for the current [EMAIL 
PROTECTED] LookAndFeel}.
    */
   public static UIDefaults getDefaults()
   {
@@ -369,6 +445,12 @@
     return getLookAndFeelDefaults().getInsets(key, locale);
   }
 
+  /**
+   * Returns an array containing information about the [EMAIL PROTECTED] 
LookAndFeel}s
+   * that are installed.
+   * 
+   * @return A list of the look and feels that are available (installed).
+   */
   public static LookAndFeelInfo[] getInstalledLookAndFeels()
   {
     return installed;
@@ -390,6 +472,13 @@
     return x.intValue();
   }
 
+  /**
+   * Returns the current look and feel (which may be <code>null</code>).
+   * 
+   * @return The current look and feel.
+   * 
+   * @see #setLookAndFeel(LookAndFeel)
+   */
   public static LookAndFeel getLookAndFeel()
   {
     return currentLookAndFeel;
@@ -398,6 +487,8 @@
   /**
    * Returns the <code>UIDefaults</code> table of the currently active
    * look and feel.
+   * 
+   * @return The [EMAIL PROTECTED] UIDefaults} for the current [EMAIL 
PROTECTED] LookAndFeel}.
    */
   public static UIDefaults getLookAndFeelDefaults()
   {
@@ -421,9 +512,13 @@
   }
   
   /**
-   * Returns the name of the LookAndFeel class that implements the
+   * Returns the name of the [EMAIL PROTECTED] LookAndFeel} class that 
implements the
    * native systems look and feel if there is one, otherwise the name
    * of the default cross platform LookAndFeel class.
+   * 
+   * @return The fully qualified class name for the system look and feel.
+   * 
+   * @see #getCrossPlatformLookAndFeelClassName()
    */
   public static String getSystemLookAndFeelClassName()
   {
@@ -431,7 +526,10 @@
   }
 
   /**
-   * Returns the Look and Feel object that renders the target component.
+   * Returns UI delegate from the current [EMAIL PROTECTED] LookAndFeel} that 
renders the 
+   * target component.
+   * 
+   * @param target  the target component.
    */
   public static ComponentUI getUI(JComponent target)
   {
@@ -440,6 +538,10 @@
 
   /**
    * Creates a new look and feel and adds it to the current array.
+   * 
+   * @param name  the look and feel name.
+   * @param className  the fully qualified name of the class that implements 
the
+   *                   look and feel.
    */
   public static void installLookAndFeel(String name, String className)
   {
@@ -451,6 +553,7 @@
    */
   public static void installLookAndFeel(LookAndFeelInfo info)
   {
+    // FIXME: not yet implemented
   }
 
   /**
@@ -466,10 +569,18 @@
    */
   public static void setInstalledLookAndFeels(UIManager.LookAndFeelInfo[] 
infos)
   {
+    // FIXME: not yet implemented.
   }
   
   /**
-   * Set the current default look.
+   * Sets the current [EMAIL PROTECTED] LookAndFeel}.
+   * 
+   * @param newLookAndFeel  the new look and feel (<code>null</code> 
permitted).
+   * 
+   * @throws UnsupportedLookAndFeelException if the look and feel is not 
+   *         supported on the current platform.
+   * 
+   * @see LookAndFeel#isSupportedLookAndFeel()
    */
   public static void setLookAndFeel(LookAndFeel newLookAndFeel)
     throws UnsupportedLookAndFeelException
@@ -499,8 +610,15 @@
 
   /**
    * Set the current default look and feel using a class name.
+   * 
+   * @param className  the look and feel class name.
+   * 
+   * @throws UnsupportedLookAndFeelException if the look and feel is not 
+   *         supported on the current platform.
+   * 
+   * @see LookAndFeel#isSupportedLookAndFeel()
    */
-  public static void setLookAndFeel (String className)
+  public static void setLookAndFeel(String className)
     throws ClassNotFoundException, InstantiationException, 
IllegalAccessException,
     UnsupportedLookAndFeelException
   {
_______________________________________________
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches

Reply via email to