- All Implemented Interfaces:
- LayoutManager,- LayoutManager2
SpringLayout lays out the children of its associated container
 according to a set of constraints.
 See How to Use SpringLayout
 in The Java Tutorial for examples of using
 SpringLayout.
 
 Each constraint,
 represented by a Spring object,
 controls the vertical or horizontal distance
 between two component edges.
 The edges can belong to
 any child of the container,
 or to the container itself.
 For example,
 the allowable width of a component
 can be expressed using a constraint
 that controls the distance between the west (left) and east (right)
 edges of the component.
 The allowable y coordinates for a component
 can be expressed by constraining the distance between
 the north (top) edge of the component
 and the north edge of its container.
 
 Every child of a SpringLayout-controlled container,
 as well as the container itself,
 has exactly one set of constraints
 associated with it.
 These constraints are represented by
 a SpringLayout.Constraints object.
 By default,
 SpringLayout creates constraints
 that make their associated component
 have the minimum, preferred, and maximum sizes
 returned by the component's
 Component.getMinimumSize(),
 Component.getPreferredSize(), and
 Component.getMaximumSize()
 methods. The x and y positions are initially not
 constrained, so that until you constrain them the Component
 will be positioned at 0,0 relative to the Insets of the
 parent Container.
 
 You can change
 a component's constraints in several ways.
 You can
 use one of the
 putConstraint
 methods
 to establish a spring
 linking the edges of two components within the same container.
 Or you can get the appropriate SpringLayout.Constraints
 object using
 getConstraints
 and then modify one or more of its springs.
 Or you can get the spring for a particular edge of a component
 using getConstraint,
 and modify it.
 You can also associate
 your own SpringLayout.Constraints object
 with a component by specifying the constraints object
 when you add the component to its container
 (using
 Container.add(Component, Object)).
 
 The Spring object representing each constraint
 has a minimum, preferred, maximum, and current value.
 The current value of the spring
 is somewhere between the minimum and maximum values,
 according to the formula given in the
 Spring.sum(javax.swing.Spring, javax.swing.Spring) method description.
 When the minimum, preferred, and maximum values are the same,
 the current value is always equal to them;
 this inflexible spring is called a strut.
 You can create struts using the factory method
 Spring.constant(int).
 The Spring class also provides factory methods
 for creating other kinds of springs,
 including springs that depend on other springs.
 
 In a SpringLayout, the position of each edge is dependent on
 the position of just one other edge. If a constraint is subsequently added
 to create a new binding for an edge, the previous binding is discarded
 and the edge remains dependent on a single edge.
 Springs should only be attached
 between edges of the container and its immediate children; the behavior
 of the SpringLayout when presented with constraints linking
 the edges of components from different containers (either internal or
 external) is undefined.
 
SpringLayout vs. Other Layout Managers
Note: Unlike many layout managers,SpringLayoutdoesn't automatically set the location of the components it manages. If you hand-code a GUI that usesSpringLayout, remember to initialize component locations by constraining the west/east and north/south locations.Depending on the constraints you use, you may also need to set the size of the container explicitly.
 Despite the simplicity of SpringLayout,
 it can emulate the behavior of most other layout managers.
 For some features,
 such as the line breaking provided by FlowLayout,
 you'll need to
 create a special-purpose subclass of the Spring class.
 
 SpringLayout also provides a way to solve
 many of the difficult layout
 problems that cannot be solved by nesting combinations
 of Boxes. That said, SpringLayout honors the
 LayoutManager2 contract correctly and so can be nested with
 other layout managers -- a technique that can be preferable to
 creating the constraints implied by the other layout managers.
 
 The asymptotic complexity of the layout operation of a SpringLayout
 is linear in the number of constraints (and/or components).
 
 Warning:
 Serialized objects of this class will not be compatible with
 future Swing releases. The current serialization support is
 appropriate for short term storage or RMI between applications running
 the same version of Swing.  As of 1.4, support for long term storage
 of all JavaBeans
 has been added to the java.beans package.
 Please see XMLEncoder.
- Since:
- 1.4
- See Also:
- 
Nested Class SummaryNested ClassesModifier and TypeClassDescriptionstatic classAConstraintsobject holds the constraints that govern the way a component's size and position change in a container controlled by aSpringLayout.
- 
Field SummaryFieldsModifier and TypeFieldDescriptionstatic final StringSpecifies the baseline of a component.static final StringSpecifies the right edge of a component's bounding rectangle.static final StringSpecifies the height of a component's bounding rectangle.static final StringSpecifies the horizontal center of a component's bounding rectangle.static final StringSpecifies the top edge of a component's bounding rectangle.static final StringSpecifies the bottom edge of a component's bounding rectangle.static final StringSpecifies the vertical center of a component's bounding rectangle.static final StringSpecifies the left edge of a component's bounding rectangle.static final StringSpecifies the width of a component's bounding rectangle.
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionvoidaddLayoutComponent(Component component, Object constraints) Ifconstraintsis an instance ofSpringLayout.Constraints, associates the constraints with the specified component.voidaddLayoutComponent(String name, Component c) Has no effect, since this layout manager does not use a per-component string.getConstraint(String edgeName, Component c) Returns the spring controlling the distance between the specified edge of the component and the top or left edge of its parent.Returns the constraints for the specified component.floatReturns 0.5f (centered).floatReturns 0.5f (centered).voidInvalidates the layout, indicating that if the layout manager has cached information it should be discarded.voidlayoutContainer(Container parent) Lays out the specified container.maximumLayoutSize(Container parent) Calculates the maximum size dimensions for the specified container, given the components it contains.minimumLayoutSize(Container parent) Calculates the minimum size dimensions for the specified container, given the components it contains.preferredLayoutSize(Container parent) Calculates the preferred size dimensions for the specified container, given the components it contains.voidputConstraint(String e1, Component c1, int pad, String e2, Component c2) Links edgee1of componentc1to edgee2of componentc2, with a fixed distance between the edges.voidLinks edgee1of componentc1to edgee2of componentc2.voidRemoves the constraints associated with the specified component.
- 
Field Details- 
NORTHSpecifies the top edge of a component's bounding rectangle.- See Also:
 
- 
SOUTHSpecifies the bottom edge of a component's bounding rectangle.- See Also:
 
- 
EASTSpecifies the right edge of a component's bounding rectangle.- See Also:
 
- 
WESTSpecifies the left edge of a component's bounding rectangle.- See Also:
 
- 
HORIZONTAL_CENTERSpecifies the horizontal center of a component's bounding rectangle.- Since:
- 1.6
- See Also:
 
- 
VERTICAL_CENTERSpecifies the vertical center of a component's bounding rectangle.- Since:
- 1.6
- See Also:
 
- 
BASELINESpecifies the baseline of a component.- Since:
- 1.6
- See Also:
 
- 
WIDTHSpecifies the width of a component's bounding rectangle.- Since:
- 1.6
- See Also:
 
- 
HEIGHTSpecifies the height of a component's bounding rectangle.- Since:
- 1.6
- See Also:
 
 
- 
- 
Constructor Details- 
SpringLayoutpublic SpringLayout()Constructs a newSpringLayout.
 
- 
- 
Method Details- 
addLayoutComponentHas no effect, since this layout manager does not use a per-component string.- Specified by:
- addLayoutComponentin interface- LayoutManager
- Parameters:
- name- the string to be associated with the component
- c- the component to be added
 
- 
removeLayoutComponentRemoves the constraints associated with the specified component.- Specified by:
- removeLayoutComponentin interface- LayoutManager
- Parameters:
- c- the component being removed from the container
 
- 
minimumLayoutSizeDescription copied from interface:LayoutManagerCalculates the minimum size dimensions for the specified container, given the components it contains.- Specified by:
- minimumLayoutSizein interface- LayoutManager
- Parameters:
- parent- the component to be laid out
- Returns:
- the minimum dimension for the container
- See Also:
 
- 
preferredLayoutSizeDescription copied from interface:LayoutManagerCalculates the preferred size dimensions for the specified container, given the components it contains.- Specified by:
- preferredLayoutSizein interface- LayoutManager
- Parameters:
- parent- the container to be laid out
- Returns:
- the preferred dimension for the container
- See Also:
 
- 
maximumLayoutSizeDescription copied from interface:LayoutManager2Calculates the maximum size dimensions for the specified container, given the components it contains.- Specified by:
- maximumLayoutSizein interface- LayoutManager2
- Parameters:
- parent- the target container
- Returns:
- the maximum size of the container
- See Also:
 
- 
addLayoutComponentIfconstraintsis an instance ofSpringLayout.Constraints, associates the constraints with the specified component.- Specified by:
- addLayoutComponentin interface- LayoutManager2
- Parameters:
- component- the component being added
- constraints- the component's constraints
- See Also:
 
- 
getLayoutAlignmentXReturns 0.5f (centered).- Specified by:
- getLayoutAlignmentXin interface- LayoutManager2
- Parameters:
- p- the target container
- Returns:
- the x-axis alignment preference
 
- 
getLayoutAlignmentYReturns 0.5f (centered).- Specified by:
- getLayoutAlignmentYin interface- LayoutManager2
- Parameters:
- p- the target container
- Returns:
- the y-axis alignment preference
 
- 
invalidateLayoutDescription copied from interface:LayoutManager2Invalidates the layout, indicating that if the layout manager has cached information it should be discarded.- Specified by:
- invalidateLayoutin interface- LayoutManager2
- Parameters:
- p- the target container
 
- 
putConstraintLinks edgee1of componentc1to edgee2of componentc2, with a fixed distance between the edges. This constraint will cause the assignmentvalue(e1, c1) = value(e2, c2) + padto take place during all subsequent layout operations.- Parameters:
- e1- the edge of the dependent
- c1- the component of the dependent
- pad- the fixed distance between dependent and anchor
- e2- the edge of the anchor
- c2- the component of the anchor
- See Also:
 
- 
putConstraintLinks edgee1of componentc1to edgee2of componentc2. As edge(e2, c2)changes value, edge(e1, c1)will be calculated by taking the (spring) sum of(e2, c2)ands. Each edge must have one of the following values:SpringLayout.NORTH,SpringLayout.SOUTH,SpringLayout.EAST,SpringLayout.WEST,SpringLayout.VERTICAL_CENTER,SpringLayout.HORIZONTAL_CENTERorSpringLayout.BASELINE.- Parameters:
- e1- the edge of the dependent
- c1- the component of the dependent
- s- the spring linking dependent and anchor
- e2- the edge of the anchor
- c2- the component of the anchor
- See Also:
 
- 
getConstraintsReturns the constraints for the specified component. Note that, unlike theGridBagLayoutgetConstraintsmethod, this method does not clone constraints. If no constraints have been associated with this component, this method returns a default constraints object positioned at 0,0 relative to the parent's Insets and its width/height constrained to the minimum, maximum, and preferred sizes of the component. The size characteristics are not frozen at the time this method is called; instead this method returns a constraints object whose characteristics track the characteristics of the component as they change.- Parameters:
- c- the component whose constraints will be returned
- Returns:
- the constraints for the specified component
 
- 
getConstraintReturns the spring controlling the distance between the specified edge of the component and the top or left edge of its parent. This method, instead of returning the current binding for the edge, returns a proxy that tracks the characteristics of the edge even if the edge is subsequently rebound. Proxies are intended to be used in builder environments where it is useful to allow the user to define the constraints for a layout in any order. Proxies do, however, provide the means to create cyclic dependencies amongst the constraints of a layout. Such cycles are detected internally bySpringLayoutso that the layout operation always terminates.- Parameters:
- edgeName- must be one of- SpringLayout.NORTH,- SpringLayout.SOUTH,- SpringLayout.EAST,- SpringLayout.WEST,- SpringLayout.VERTICAL_CENTER,- SpringLayout.HORIZONTAL_CENTERor- SpringLayout.BASELINE
- c- the component whose edge spring is desired
- Returns:
- a proxy for the spring controlling the distance between the specified edge and the top or left edge of its parent
- See Also:
 
- 
layoutContainerDescription copied from interface:LayoutManagerLays out the specified container.- Specified by:
- layoutContainerin interface- LayoutManager
- Parameters:
- parent- the container to be laid out
 
 
-