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}.