[cp-patches] RFA: java.awt.Component min/max/preferred size methods

David Gilbert david.gilbert at object-refinery.com
Tue Jun 27 13:43:10 UTC 2006


I didn't get any feedback on this so, given that it is easily reverted, 
I'm going to commit it.  The Intel test suite for java.awt.* makes heavy 
use of these methods, and this patch fixes 39 failing tests.

Regards,

Dave

David Gilbert wrote:

> I'm requesting approval for this patch that implements six methods in 
> java.awt.Component that were added in JDK1.5:
>
> 2006-06-16  David Gilbert  <david.gilbert at object-refinery.com>
>
>     * java/awt/Component.java
>     (minSizeSet): New field,
>     (maxSize): Likewise,
>     (maxSizeSet): Likewise,
>     (isMaximumSizeSet): Implemented,
>     (isMinimumSizeSet): Likewise,
>     (isPreferredSizeSet): Likewise,
>     (setMaximumSize): Likewise,
>     (setMinimumSize): Likewise,
>     (setPreferredSize): Likewise.
>
> I'm asking for approval because Component is a core class in AWT and I 
> don't like to change those without asking first.  Having said that, it 
> is an easy patch to revert if necessary...
>
> Regards,
>
> Dave
>
>------------------------------------------------------------------------
>
>Index: java/awt/Component.java
>===================================================================
>RCS file: /sources/classpath/classpath/java/awt/Component.java,v
>retrieving revision 1.124
>diff -u -r1.124 Component.java
>--- java/awt/Component.java	14 Jun 2006 19:09:40 -0000	1.124
>+++ java/awt/Component.java	16 Jun 2006 09:46:55 -0000
>@@ -70,6 +70,7 @@
> import java.awt.image.VolatileImage;
> import java.awt.peer.ComponentPeer;
> import java.awt.peer.LightweightPeer;
>+import java.beans.PropertyChangeEvent;
> import java.beans.PropertyChangeListener;
> import java.beans.PropertyChangeSupport;
> import java.io.IOException;
>@@ -427,6 +428,24 @@
>   Dimension minSize;
> 
>   /**
>+   * Flag indicating whether the minimum size for the component has been set
>+   * by a call to {@link #setMinimumSize(Dimension)} with a non-null value.
>+   */
>+  boolean minSizeSet;
>+  
>+  /**
>+   * The maximum size for the component.
>+   * @see #setMaximumSize(Dimension)
>+   */
>+  Dimension maxSize;
>+  
>+  /**
>+   * A flag indicating whether the maximum size for the component has been set
>+   * by a call to {@link #setMaximumSize(Dimension)} with a non-null value.
>+   */
>+  boolean maxSizeSet;
>+  
>+  /**
>    * Cached information on the preferred size. Should have been transient.
>    *
>    * @serial ignore
>@@ -434,6 +453,12 @@
>   Dimension prefSize;
> 
>   /**
>+   * Flag indicating whether the preferred size for the component has been set
>+   * by a call to {@link #setPreferredSize(Dimension)} with a non-null value.
>+   */
>+  boolean prefSizeSet;
>+
>+  /**
>    * Set to true if an event is to be handled by this component, false if
>    * it is to be passed up the hierarcy.
>    *
>@@ -1584,6 +1609,7 @@
>    *
>    * @return the component's preferred size
>    * @see #getMinimumSize()
>+   * @see #setPreferredSize(Dimension)
>    * @see LayoutManager
>    */
>   public Dimension getPreferredSize()
>@@ -1592,6 +1618,40 @@
>   }
> 
>   /**
>+   * Sets the preferred size that will be returned by 
>+   * {@link #getPreferredSize()} always, and sends a 
>+   * {@link PropertyChangeEvent} (with the property name 'preferredSize') to 
>+   * all registered listeners.
>+   * 
>+   * @param size  the preferred size (<code>null</code> permitted).
>+   * 
>+   * @since 1.5
>+   * 
>+   * @see #getPreferredSize()
>+   */
>+  public void setPreferredSize(Dimension size)
>+  {
>+    Dimension old = prefSizeSet ? prefSize : null;
>+    prefSize = size;
>+    prefSizeSet = (size != null);
>+    firePropertyChange("preferredSize", old, size);
>+  }
>+  
>+  /**
>+   * Returns <code>true</code> if the current preferred size is not 
>+   * <code>null</code> and was set by a call to 
>+   * {@link #setPreferredSize(Dimension)}, otherwise returns <code>false</code>.
>+   * 
>+   * @return A boolean.
>+   * 
>+   * @since 1.5
>+   */
>+  public boolean isPreferredSizeSet()
>+  {
>+    return prefSizeSet;
>+  }
>+  
>+  /**
>    * Returns the component's preferred size.
>    *
>    * @return the component's preferred size
>@@ -1614,6 +1674,7 @@
>    * 
>    * @return the component's minimum size
>    * @see #getPreferredSize()
>+   * @see #setMinimumSize(Dimension)
>    * @see LayoutManager
>    */
>   public Dimension getMinimumSize()
>@@ -1622,6 +1683,39 @@
>   }
> 
>   /**
>+   * Sets the minimum size that will be returned by {@link #getMinimumSize()}
>+   * always, and sends a {@link PropertyChangeEvent} (with the property name
>+   * 'minimumSize') to all registered listeners.
>+   * 
>+   * @param size  the minimum size (<code>null</code> permitted).
>+   * 
>+   * @since 1.5
>+   * 
>+   * @see #getMinimumSize()
>+   */
>+  public void setMinimumSize(Dimension size)
>+  {
>+    Dimension old = minSizeSet ? minSize : null;
>+    minSize = size;
>+    minSizeSet = (size != null);
>+    firePropertyChange("minimumSize", old, size);
>+  }
>+  
>+  /**
>+   * Returns <code>true</code> if the current minimum size is not 
>+   * <code>null</code> and was set by a call to 
>+   * {@link #setMinimumSize(Dimension)}, otherwise returns <code>false</code>.
>+   * 
>+   * @return A boolean.
>+   * 
>+   * @since 1.5
>+   */
>+  public boolean isMinimumSizeSet()
>+  {
>+    return minSizeSet;
>+  }
>+  
>+  /**
>    * Returns the component's minimum size.
>    *
>    * @return the component's minimum size
>@@ -1640,15 +1734,52 @@
>    *
>    * @return the component's maximum size
>    * @see #getMinimumSize()
>+   * @see #setMaximumSize(Dimension)
>    * @see #getPreferredSize()
>    * @see LayoutManager
>    */
>   public Dimension getMaximumSize()
>   {
>-    return new Dimension(Short.MAX_VALUE, Short.MAX_VALUE);
>+    if (maxSizeSet)
>+      return maxSize;
>+    else
>+      return new Dimension(Short.MAX_VALUE, Short.MAX_VALUE);
>   }
> 
>   /**
>+   * Sets the maximum size that will be returned by {@link #getMaximumSize()}
>+   * always, and sends a {@link PropertyChangeEvent} (with the property name
>+   * 'maximumSize') to all registered listeners.
>+   * 
>+   * @param size  the maximum size (<code>null</code> permitted).
>+   * 
>+   * @since 1.5
>+   * 
>+   * @see #getMaximumSize()
>+   */
>+  public void setMaximumSize(Dimension size)
>+  {
>+    Dimension old = maxSizeSet ? maxSize : null;
>+    maxSize = size;
>+    maxSizeSet = (size != null);
>+    firePropertyChange("maximumSize", old, size);
>+  }
>+
>+  /**
>+   * Returns <code>true</code> if the current maximum size is not 
>+   * <code>null</code> and was set by a call to 
>+   * {@link #setMaximumSize(Dimension)}, otherwise returns <code>false</code>.
>+   * 
>+   * @return A boolean.
>+   * 
>+   * @since 1.5
>+   */
>+  public boolean isMaximumSizeSet()
>+  {
>+    return maxSizeSet;
>+  }
>+  
>+  /**
>    * Returns the preferred horizontal alignment of this component. The value
>    * returned will be between {@link #LEFT_ALIGNMENT} and
>    * {@link #RIGHT_ALIGNMENT}, inclusive.
>  
>




More information about the Classpath-patches mailing list