I'm checking this in. This adds some new 1.5 methods to Spring, and also a new SpringLayout.Constraints constructor.
Tom 2006-03-04 Tom Tromey <[EMAIL PROTECTED]> * javax/swing/SpringLayout.java (Constraints): New constructor. * javax/swing/Spring.java (width): New method. (height): Likewise. (scale): Likewise. Index: javax/swing/Spring.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/Spring.java,v retrieving revision 1.4 diff -u -r1.4 Spring.java --- javax/swing/Spring.java 19 Oct 2005 15:45:05 -0000 1.4 +++ javax/swing/Spring.java 4 Mar 2006 20:50:53 -0000 @@ -37,6 +37,9 @@ package javax.swing; +import java.awt.Component; +import java.awt.Dimension; + /** * Calculates the space between component edges, that are layed out by * [EMAIL PROTECTED] SpringLayout}. @@ -168,6 +171,139 @@ } /** + * Return a new Spring which computes its values by scaling + * the values of another spring by a constant factor. If the + * factor is negative, the minimum and maximum values of + * the argument spring will be interchanged. + * @param spring the spring to track + * @param factor the factor by which to scale + * @return a new multiplicative Spring + * @since 1.5 + */ + public static Spring scale(final Spring spring, final float factor) + { + if (spring == null) + throw new NullPointerException("spring argument is null"); + return new Spring() + { + public int getMaximumValue() + { + return (int) ((factor < 0 ? spring.getMinimumValue() + : spring.getMaximumValue()) + * factor); + } + + public int getMinimumValue() + { + return (int) ((factor < 0 ? spring.getMaximumValue() + : spring.getMinimumValue()) + * factor); + } + + public int getPreferredValue() + { + return (int) (spring.getPreferredValue() * factor); + } + + public int getValue() + { + return (int) (spring.getValue() * factor); + } + + public void setValue(int value) + { + spring.setValue((int) (value / factor)); + } + }; + } + + /** + * Return a new Spring which takes its values from the specified + * Component. In particular, the maximum value is taken from + * the maximumSize, the minimum value is taken from the minimumSize, + * the preferred value is taken from the preferredSize, and the + * value is taken from the component's current size. These values + * change as the component changes size. + * @param component the component + * @return a new Spring which tracks the component's width + * @since 1.5 + */ + public static Spring width(final Component component) + { + return new Spring() + { + public int getMaximumValue() + { + return component.getMaximumSize().width; + } + + public int getMinimumValue() + { + return component.getMinimumSize().width; + } + + public int getPreferredValue() + { + return component.getPreferredSize().width; + } + + public int getValue() + { + return component.getSize().width; + } + + public void setValue(int value) + { + Dimension d = component.getSize(); + component.setSize(value, d.height); + } + }; + } + + /** + * Return a new Spring which takes its values from the specified + * Component. In particular, the maximum value is taken from + * the maximumSize, the minimum value is taken from the minimumSize, + * the preferred value is taken from the preferredSize, and the + * value is taken from the component's current size. These values + * change as the component changes size. + * @param component the component + * @return a new Spring which tracks the component's height + * @since 1.5 + */ + public static Spring height(final Component component) + { + return new Spring() + { + public int getMaximumValue() + { + return component.getMaximumSize().height; + } + + public int getMinimumValue() + { + return component.getMinimumSize().height; + } + + public int getPreferredValue() + { + return component.getPreferredSize().height; + } + + public int getValue() + { + return component.getSize().height; + } + + public void setValue(int value) + { + Dimension d = component.getSize(); + component.setSize(d.width, value); + } + }; + } + + /** * A simple Spring, that holds constant values for min, pref and max. * * @author Roman Kennke ([EMAIL PROTECTED]) Index: javax/swing/SpringLayout.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/SpringLayout.java,v retrieving revision 1.7 diff -u -r1.7 SpringLayout.java --- javax/swing/SpringLayout.java 3 Mar 2006 17:13:06 -0000 1.7 +++ javax/swing/SpringLayout.java 4 Mar 2006 20:50:53 -0000 @@ -150,6 +150,25 @@ } /** + * Create a new Constraints object which tracks the indicated + * component. The x and y positions for this Constraints object + * are constant Springs created with the component's location at + * the time this constructor is called. The width and height + * of this Constraints are Springs created using + * [EMAIL PROTECTED] Spring#width(Component)} and [EMAIL PROTECTED] Spring#height(Component)}, + * respectively. + * @param component the component to track + * @since 1.5 + */ + public Constraints(Component component) + { + this(Spring.constant(component.getX()), + Spring.constant(component.getY()), + Spring.width(component), + Spring.height(component)); + } + + /** * Returns the constraint for the edge with the <code>edgeName</code>. * This is expected to be one of * [EMAIL PROTECTED] #EAST}, [EMAIL PROTECTED] #WEST}, [EMAIL PROTECTED] #NORTH} or [EMAIL PROTECTED] #SOUTH}.