Class GroupLayout
GroupLayout is a LayoutManager that hierarchically groups components to achieve common, and not so common, layouts. Grouping is done by instances of the Group class. GroupLayout supports two types of groups:
Sequential:A sequential group positions its child elements sequentially, one after another. Parallel:A parallel group positions its child elements in the same space on top of each other. Parallel groups can also align the child elements along their baseline.
Each Group can contain any number of child groups, Components or gaps. GroupLayout treats each axis independently. That is, there is a group representing the horizontal axis, and a separate group representing the vertical axis. The horizontal group is responsible for setting the x and width of its contents, where as the vertical group is responsible for setting the y and height of its contents.
The following code builds a simple layout consisting of two labels in one column, followed by two textfields in the next column:
Container panel = ...;
GroupLayout layout = new GroupLayout(panel);
panel.setLayout(layout);
layout.setAutocreateGaps(true);
layout.setAutocreateContainerGaps(true);
GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
hGroup.add(layout.createParallelGroup().add(label1).add(label2)).
add(layout.createParallelGroup().add(tf1).add(tf2));
layout.setHorizontalGroup(hGroup);
GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
vGroup.add(layout.createParallelGroup(GroupLayout.BASELINE).add(label1).add(tf1)).
add(layout.createParallelGroup(GroupLayout.BASELINE).add(label2).add(tf2));
layout.setVerticalGroup(vGroup);
This layout consists of the following:
-
The horizontal axis consists of a sequential group containing two parallel groups. The first parallel group consists of the labels, with the second parallel group consisting of the text fields.
-
The vertical axis similarly consists of a sequential group containing two parallel groups. The parallel groups align their contents along the baseline. The first parallel group consists of the first label and text field, and the second group consists of the second label and text field.
There are a couple of things to notice in this code:
-
You need not explicitly add the components to the container, this is indirectly done by using one of the
addmethods. -
The various
addmethods ofGroupsreturn themselves. This allows for easy chaining of invocations. For example,group.add(label1).add(label2);is equivalent togroup.add(label1);group.add(label2);. -
There are no public constructors for the Groups, instead use the create methods of
GroupLayout.
GroupLayout offer the ability to automatically insert the appropriate gap
between components. This can be turned on using the
setAutocreateGaps() method. Similarly you can use
the setAutocreateContainerGaps() method to insert gaps
between the components and the container.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionclassGroup provides for commonality between the two types of operations supported byGroupLayout: laying out components one after another (SequentialGroup) or layout on top of each other (ParallelGroup).classAGroupthat lays out its elements on top of each other.classAGroupthat lays out its elements sequentially, one after another. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intPossible alignment type.static final intPossible alignment type.static final intPossible value for the add methods that takes a Component.static final intCompass-direction east (right).static final intPossible argument when linking sizes of components.static final intPossible alignment type.static final intCompass-direction North (up).static final intPossible value for the add methods that takes a Component.static final intCompass-direction south (down).static final intPossible alignment type.static final intPossible argument when linking sizes of components.static final intCompass-direction west (left). -
Constructor Summary
ConstructorsConstructorDescriptionGroupLayout(Container host) Creates a GroupLayout for the specified Container. -
Method Summary
Modifier and TypeMethodDescriptioncreateBaselineGroup(boolean resizable, boolean anchorBaselineToTop) Creates and returns aParallelGroupthat aligns it's elements along the baseline.Creates and returns aParallelGroupwith aLEADINGalignment.createParallelGroup(int alignment) Creates and returns anParallelGroup.createParallelGroup(int alignment, boolean resizable) Creates and returns anParallelGroup.Creates and returns aSequentialGroup.booleanReturns whether or not gaps between the container and the first/last components should automatically be created.booleanReturns true if gaps between components are automatically be created.booleanReturns whether component visibility is considered when sizing and positioning components.Returns theGroupthat is responsible for layout along the horizontal axis.Returns the LayoutStyle instance to usegetPreferredSize(Container parent) Returns the preferred size for the specified container.Returns theParallelGroupthat is responsible for layout along the vertical axis.voidlayoutContainer(Container parent) Lays out the specified container.voidForces the set of components to have the same size.voidForces the set of components to have the same size.voidremoveLayoutComponent(Component component) Notification that aComponenthas been removed from the parent container.voidRemoves an existing component replacing it with the specified component.voidsetAutocreateContainerGaps(boolean autocreatePadding) Sets whether or not gaps between the container and the first/last components should automatically be created.voidsetAutocreateGaps(boolean autocreatePadding) Sets whether or not a gap between components should automatically be created.voidsetHonorsVisibility(boolean honorsVisibility) Sets whether component visibility is considered when sizing and positioning components.voidsetHonorsVisibility(Component component, Boolean honorsVisibility) Sets whether the component's visibility is considered for sizing and positioning.voidSets theGroupthat is responsible for layout along the horizontal axis.voidsetLayoutStyle(LayoutStyle layoutStyle) Sets the LayoutStyle this GroupLayout is to use.voidSets theGroupthat is responsible for layout along the vertical axis.toString()Returns a textual description of this GroupLayout.Methods inherited from class Layout
addLayoutComponent, cloneConstraint, equals, getChildrenInTraversalOrder, getComponentConstraint, hashCode, isConstraintTracking, isOverlapSupported, obscuresPotential, overridesTabIndices, updateTabIndices
-
Field Details
-
NORTH
public static final int NORTHCompass-direction North (up).- See Also:
-
EAST
public static final int EASTCompass-direction east (right).- See Also:
-
SOUTH
public static final int SOUTHCompass-direction south (down).- See Also:
-
WEST
public static final int WESTCompass-direction west (left).- See Also:
-
HORIZONTAL
public static final int HORIZONTALPossible argument when linking sizes of components. Specifies the the two component should share the same size along the horizontal axis.
See also
- #linkSize(Component[], int)
- See Also:
-
VERTICAL
public static final int VERTICALPossible argument when linking sizes of components. Specifies the the two component should share the same size along the vertical axis.
See also
- #linkSize(Component[], int)
- See Also:
-
LEADING
public static final int LEADINGPossible alignment type. Indicates the elements should be aligned to the origin. For the horizontal axis with a left to right orientation this means aligned to the left.
See also
- #createParallelGroup(int)
- See Also:
-
TRAILING
public static final int TRAILINGPossible alignment type. Indicates the elements should be aligned to the end. For the horizontal axis with a left to right orientation this means aligned to the right.
See also
- #createParallelGroup(int)
- See Also:
-
CENTER
public static final int CENTERPossible alignment type. Indicates the elements should centered in the spaced provided.
See also
- #createParallelGroup(int)
- See Also:
-
BASELINE
public static final int BASELINEPossible alignment type. Indicates the elements should aligned along their baseline.
See also
- #createParallelGroup(int)
- See Also:
-
DEFAULT_SIZE
public static final int DEFAULT_SIZEPossible value for the add methods that takes a Component. Indicates the size from the component should be used.- See Also:
-
PREFERRED_SIZE
public static final int PREFERRED_SIZEPossible value for the add methods that takes a Component. Indicates the preferred size should be used.- See Also:
-
-
Constructor Details
-
GroupLayout
Creates a GroupLayout for the specified Container.
Parameters
host: the Container to layout
Throws
IllegalArgumentException: if host is null
-
-
Method Details
-
getHonorsVisibility
public boolean getHonorsVisibility()Returns whether component visibility is considered when sizing and positioning components.
Returns
- Returns:
- whether component visibility is considered when sizing and positioning components
-
setHonorsVisibility
public void setHonorsVisibility(boolean honorsVisibility) Sets whether component visibility is considered when sizing and positioning components. A value of
trueindicates that non-visible components should not be treated as part of the layout. A value offalseindicates that components should be positioned and sized regardless of visibility.A value of
falseis useful when the visibility of components is dynamically adjusted and you don't want surrounding components and the sizing to change.The specified value is used for components that do not have an explicit visibility specified.
The default is
true.Parameters
honorsVisibility: @param honorsVisibility whether component visibility is considered when sizing and positioning components
See also
- #setHonorsVisibility(Component, Boolean)
-
setHonorsVisibility
Sets whether the component's visibility is considered for sizing and positioning. A value of
Boolean.TRUEindicates that ifcomponentis not visible it should not be treated as part of the layout. A value offalseindicates thatcomponentis positioned and sized regardless of it's visibility. A value ofnullindicates the value specified by the single argument methodsetHonorsVisibilityshould be used.If
componentis not a child of theContainerthisGroupLayoutis managing, it will be added to theContainer.Parameters
-
component: the component -
honorsVisibility: @param honorsVisibility whethercomponent's visibility should be considered for sizing and positioning
Throws
IllegalArgumentException: ifcomponentisnull
See also
- #setHonorsVisibility(boolean)
-
-
toString
-
getAutocreateGaps
public boolean getAutocreateGaps()Returns true if gaps between components are automatically be created.
Returns
true if gaps between components should automatically be created
-
setAutocreateGaps
public void setAutocreateGaps(boolean autocreatePadding) Sets whether or not a gap between components should automatically be created. For example, if this is true and you add two components to a
SequentialGroupa gap between the two will automatically be created. The default is false.Parameters
autocreatePadding: @param autocreatePadding whether or not to automatically created a gap between components and the container
-
getAutocreateContainerGaps
public boolean getAutocreateContainerGaps()Returns whether or not gaps between the container and the first/last components should automatically be created. The default is false.
Returns
- Returns:
- whether or not the gaps between the container and the first/last components should automatically be created
-
setAutocreateContainerGaps
public void setAutocreateContainerGaps(boolean autocreatePadding) Sets whether or not gaps between the container and the first/last components should automatically be created. The default is false.
Parameters
autocreatePadding: @param autocreatePadding whether or not to automatically create gaps between the container and first/last components.
-
getHorizontalGroup
Returns the
Groupthat is responsible for layout along the horizontal axis.Returns
- Returns:
ParallelGroupresponsible for layout along the horizontal axis.
-
setHorizontalGroup
Sets the
Groupthat is responsible for layout along the horizontal axis.Parameters
group: @param groupGroupresponsible for layout along the horizontal axis
Throws
IllegalArgumentException: if group is null
-
getVerticalGroup
Returns the
ParallelGroupthat is responsible for layout along the vertical axis.Returns
- Returns:
ParallelGroupresponsible for layout along the vertical axis.
-
setVerticalGroup
Sets the
Groupthat is responsible for layout along the vertical axis.Parameters
group: @param groupGroupresponsible for layout along the vertical axis.
Throws
IllegalArgumentException: if group is null.
-
createSequentialGroup
Creates and returns a
SequentialGroup.Returns
a new
SequentialGroup -
createParallelGroup
Creates and returns a
ParallelGroupwith aLEADINGalignment. This is a cover method for the more generalcreateParallelGroup(int)method.Returns
a new ParallelGroup
See also
- #createParallelGroup(int)
-
createParallelGroup
Creates and returns an
ParallelGroup. The alignment specifies how children elements should be positioned when the the parallel group is given more space than necessary. For example, if a ParallelGroup with an alignment of TRAILING is given 100 pixels and a child only needs 50 pixels, the child will be positioned at the position 50.Parameters
alignment: @param alignment alignment for the elements of the Group, one ofLEADING,TRAILING,CENTERorBASELINE.
Returns
a new
ParallelGroupThrows
IllegalArgumentException: @throws IllegalArgumentException if alignment is not one ofLEADING,TRAILING,CENTERorBASELINE
-
createParallelGroup
Creates and returns an
ParallelGroup. The alignment specifies how children elements should be positioned when the the parallel group is given more space than necessary. For example, if a ParallelGroup with an alignment of TRAILING is given 100 pixels and a child only needs 50 pixels, the child will be positioned at the position 50.Parameters
-
alignment: @param alignment alignment for the elements of the Group, one ofLEADING,TRAILING,CENTERorBASELINE. -
resizable: @param resizable whether or not the group is resizable. If the group is not resizable the min/max size will be the same as the preferred.
Returns
a new
ParallelGroupThrows
IllegalArgumentException: @throws IllegalArgumentException if alignment is not one ofLEADING,TRAILING,CENTERorBASELINE
-
-
createBaselineGroup
public GroupLayout.ParallelGroup createBaselineGroup(boolean resizable, boolean anchorBaselineToTop) Creates and returns a
ParallelGroupthat aligns it's elements along the baseline.Parameters
-
resizable: whether the group is resizable -
anchorBaselineToTop: @param anchorBaselineToTop whether the baseline is anchored to the top or bottom of the group
Returns
parallel group
See also
-
#createBaselineGroup
-
ParallelGroup
-
-
linkSize
Forces the set of components to have the same size. This can be used multiple times to force any number of components to share the same size.
Linked Components are not be resizable.
Parameters
components: Components to force to have same size.
Throws
IllegalArgumentException: @throws IllegalArgumentException ifcomponentsis null, or contains null.
-
linkSize
Forces the set of components to have the same size. This can be used multiple times to force any number of components to share the same size.
Linked Components are not be resizable.
Parameters
-
components: Components to force to have same size. -
axis: @param axis Axis to bind size, one of HORIZONTAL, VERTICAL or HORIZONTAL | VERTICAL
Throws
-
IllegalArgumentException: @throws IllegalArgumentException ifcomponentsis null, or contains null. -
IllegalArgumentException: @throws IllegalArgumentException ifaxisdoes not containHORIZONTALorVERTICAL
-
-
replace
Removes an existing component replacing it with the specified component.
Parameters
-
existingComponent: @param existingComponent the Component that should be removed and replaced with newComponent -
newComponent: the Component to put in existingComponents place
Throws
IllegalArgumentException: @throws IllegalArgumentException is either of the Components are null or if existingComponent is not being managed by this layout manager
-
-
getLayoutStyle
Returns the LayoutStyle instance to use
Returns
the LayoutStyle instance to use
-
setLayoutStyle
Sets the LayoutStyle this GroupLayout is to use. A value of null can be used to indicate the shared instance of LayoutStyle should be used.
Parameters
layoutStyle: the LayoutStyle to use
-
removeLayoutComponent
Notification that a
Componenthas been removed from the parent container. You should not invoke this method directly, instead invokeremoveComponenton the parentContainer.Parameters
component: the component to be removed
See also
- Container#removeComponent
- Overrides:
removeLayoutComponentin classLayout
-
getPreferredSize
Returns the preferred size for the specified container.
Parameters
parent: the container to return size for
Throws
-
IllegalArgumentException: @throws IllegalArgumentException ifparentis not the sameContainerthat this was created with -
IllegalStateException: @throws IllegalStateException if any of the components added to this layout are not in both a horizontal and vertical group
See also
- Container#getPreferredSize
- Specified by:
getPreferredSizein classLayout
-
layoutContainer
Lays out the specified container.
Parameters
parent: the container to be laid out
Throws
IllegalStateException: @throws IllegalStateException if any of the components added to this layout are not in both a horizontal and vertical group
- Specified by:
layoutContainerin classLayout
-