public class GridBagLayout extends Objectimplements LayoutManager2 , Serializable
GridBagLayout class is a flexible layout manager that aligns components vertically, horizontally or along their baseline without requiring that the components be of the same size. Each
GridBagLayout object maintains a dynamic, rectangular grid of cells, with each component occupying one or more cells, called its
display area.
Each component managed by a GridBagLayout is associated with an instance of GridBagConstraints. The constraints object specifies where a component's display area should be located on the grid and how the component should be positioned within its display area. In addition to its constraints object, the GridBagLayout also considers each component's minimum and preferred sizes in order to determine a component's size.
The overall orientation of the grid depends on the container's ComponentOrientation property. For horizontal left-to-right orientations, grid coordinate (0,0) is in the upper left corner of the container with x increasing to the right and y increasing downward. For horizontal right-to-left orientations, grid coordinate (0,0) is in the upper right corner of the container with x increasing to the left and y increasing downward.
To use a grid bag layout effectively, you must customize one or more of the GridBagConstraints objects that are associated with its components. You customize a GridBagConstraints object by setting one or more of its instance variables:
GridBagConstraints.gridx ,
GridBagConstraints.gridy
gridx = 0,
gridy = 0. For horizontal left-to-right layout, a component's leading corner is its upper left. For horizontal right-to-left layout, a component's leading corner is its upper right. Use
GridBagConstraints.RELATIVE (the default value) to specify that the component be placed immediately following (along the x axis for
gridx or the y axis for
gridy) the component that was added to the container just before this component was added.
GridBagConstraints.gridwidth ,
GridBagConstraints.gridheight
gridwidth) or column (for
gridheight) in the component's display area. The default value is 1. Use
GridBagConstraints.REMAINDER to specify that the component's display area will be from
gridx to the last cell in the row (for
gridwidth) or from
gridy to the last cell in the column (for
gridheight). Use
GridBagConstraints.RELATIVE to specify that the component's display area will be from
gridx to the next to the last cell in its row (for
gridwidth or from
gridy to the next to the last cell in its column (for
gridheight).
GridBagConstraints.fill
GridBagConstraints.NONE (the default),
GridBagConstraints.HORIZONTAL (make the component wide enough to fill its display area horizontally, but don't change its height),
GridBagConstraints.VERTICAL (make the component tall enough to fill its display area vertically, but don't change its width), and
GridBagConstraints.BOTH (make the component fill its display area entirely).
GridBagConstraints.ipadx ,
GridBagConstraints.ipady
ipadx pixels. Similarly, the height of the component will be at least the minimum height plus
ipady pixels.
GridBagConstraints.insets
GridBagConstraints.anchor
ComponentOrientation property while absolute values are not. Baseline relative values are calculated relative to the baseline. Valid values are:
Absolute Values |
Orientation Relative Values |
Baseline Relative Values |
|---|---|---|
|
|
|
GridBagConstraints.weightx ,
GridBagConstraints.weighty
weightx) and column (
weighty), all the components clump together in the center of their container. This is because when the weight is zero (the default), the
GridBagLayout object puts any extra space between its grid of cells and the edges of the container.
Each row may have a baseline; the baseline is determined by the components in that row that have a valid baseline and are aligned along the baseline (the component's anchor value is one of BASELINE, BASELINE_LEADING or BASELINE_TRAILING). If none of the components in the row has a valid baseline, the row does not have a baseline.
If a component spans rows it is aligned either to the baseline of the start row (if the baseline-resize behavior is CONSTANT_ASCENT) or the end row (if the baseline-resize behavior is CONSTANT_DESCENT). The row that the component is aligned to is called the prevailing row.
The following figure shows a baseline layout and includes a component that spans rows:
|
CONSTANT_DESCENT and has an anchor of BASELINE. As the baseline-resize behavior is CONSTANT_DESCENT the prevailing row for the panel is row 1. CENTER_OFFSET and an anchor of BASELINE. Components positioned using one of the baseline-relative values resize differently than when positioned using an absolute or orientation-relative value. How components change is dictated by how the baseline of the prevailing row changes. The baseline is anchored to the bottom of the display area if any components with the same prevailing row have a baseline-resize behavior of CONSTANT_DESCENT, otherwise the baseline is anchored to the top of the display area. The following rules dictate the resize behavior:
OTHER are only resized if the baseline at the resized size fits within the display area. If the baseline is such that it does not fit within the display area the component is not resized. OTHER can only grow as tall as display height - baseline + baseline of component. The following figures show ten components (all buttons) managed by a grid bag layout. Figure 2 shows the layout for a horizontal, left-to-right container and Figure 3 shows the layout for a horizontal, right-to-left container.
|
|
| Figure 2: Horizontal, Left-to-Right | Figure 3: Horizontal, Right-to-Left |
Each of the ten components has the fill field of its associated GridBagConstraints object set to GridBagConstraints.BOTH. In addition, the components have the following non-default constraints:
weightx = 1.0 weightx = 1.0, gridwidth = GridBagConstraints.REMAINDER gridwidth = GridBagConstraints.REMAINDER gridwidth = GridBagConstraints.RELATIVE gridwidth = GridBagConstraints.REMAINDER gridheight = 2, weighty = 1.0 gridwidth = GridBagConstraints.REMAINDER Here is the code that implements the example shown above:
import java.awt.*;
import java.util.*;
import java.applet.Applet;
public class GridBagEx1 extends Applet {
protected void makebutton(String name,
GridBagLayout gridbag,
GridBagConstraints c) {
Button button = new Button(name);
gridbag.setConstraints(button, c);
add(button);
}
public void init() {
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
setFont(new Font("SansSerif", Font.PLAIN, 14));
setLayout(gridbag);
c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
makebutton("Button1", gridbag, c);
makebutton("Button2", gridbag, c);
makebutton("Button3", gridbag, c);
c.gridwidth = GridBagConstraints.REMAINDER; //end row
makebutton("Button4", gridbag, c);
c.weightx = 0.0; //reset to the default
makebutton("Button5", gridbag, c); //another row
c.gridwidth = GridBagConstraints.RELATIVE; //next-to-last in row
makebutton("Button6", gridbag, c);
c.gridwidth = GridBagConstraints.REMAINDER; //end row
makebutton("Button7", gridbag, c);
c.gridwidth = 1; //reset to the default
c.gridheight = 2;
c.weighty = 1.0;
makebutton("Button8", gridbag, c);
c.weighty = 0.0; //reset to the default
c.gridwidth = GridBagConstraints.REMAINDER; //end row
c.gridheight = 1; //reset to the default
makebutton("Button9", gridbag, c);
makebutton("Button10", gridbag, c);
setSize(300, 100);
}
public static void main(String args[]) {
Frame f = new Frame("GridBag Layout Example");
GridBagEx1 ex1 = new GridBagEx1();
ex1.init();
f.add("Center", ex1);
f.pack();
f.setSize(f.getPreferredSize());
f.show();
}
}
GridBagConstraints,
GridBagLayoutInfo,
ComponentOrientation,
Serialized Form
| Modifier and Type | Field and Description |
|---|---|
double[] |
columnWeights
This field holds the overrides to the column weights.
|
int[] |
columnWidths
This field holds the overrides to the column minimum width.
|
protected Hashtable |
comptable
This hashtable maintains the association between a component and its gridbag constraints.
|
protected GridBagConstraints |
defaultConstraints
This field holds a gridbag constraints instance containing the default values, so if a component does not have gridbag constraints associated with it, then the component will be assigned a copy of the
defaultConstraints.
|
protected GridBagLayoutInfo |
layoutInfo
This field holds the layout information for the gridbag.
|
protected static int |
MAXGRIDSIZE
This field is no longer used to reserve arrays and kept for backward compatibility.
|
protected static int |
MINSIZE
The smallest grid that can be laid out by the grid bag layout.
|
protected static int |
PREFERREDSIZE
The preferred grid size that can be laid out by the grid bag layout.
|
int[] |
rowHeights
This field holds the overrides to the row minimum heights.
|
double[] |
rowWeights
This field holds the overrides to the row weights.
|
| Constructor and Description |
|---|
GridBagLayout()
Creates a grid bag layout manager.
|
| Modifier and Type | Method and Description |
|---|---|
void |
addLayoutComponent(Component
Adds the specified component to the layout, using the specified
constraints object.
|
void |
addLayoutComponent(String
Has no effect, since this layout manager does not use a per-component string.
|
protected void |
adjustForGravity(GridBagConstraints
Adjusts the x, y, width, and height fields to the correct values depending on the constraint geometry and pads.
|
protected void |
AdjustForGravity(GridBagConstraints
This method is obsolete and supplied for backwards compatibility only; new code should call
adjustForGravity instead.
|
protected void |
arrangeGrid(Container
Lays out the grid.
|
protected void |
ArrangeGrid(Container
This method is obsolete and supplied for backwards compatibility only; new code should call
arrangeGrid instead.
|
GridBagConstraints |
getConstraints(Component
Gets the constraints for the specified component.
|
float |
getLayoutAlignmentX(Container
Returns the alignment along the x axis.
|
float |
getLayoutAlignmentY(Container
Returns the alignment along the y axis.
|
int[][] |
getLayoutDimensions()
Determines column widths and row heights for the layout grid.
|
protected GridBagLayoutInfo |
getLayoutInfo(Container
Fills in an instance of
GridBagLayoutInfo for the current set of managed children.
|
protected GridBagLayoutInfo |
GetLayoutInfo(Container
This method is obsolete and supplied for backwards compatibility only; new code should call
getLayoutInfo instead.
|
Point |
getLayoutOrigin()
Determines the origin of the layout area, in the graphics coordinate space of the target container.
|
double[][] |
getLayoutWeights()
Determines the weights of the layout grid's columns and rows.
|
protected Dimension |
getMinSize(Container
Figures out the minimum size of the master based on the information from
getLayoutInfo.
|
protected Dimension |
GetMinSize(Container
This method is obsolete and supplied for backwards compatibility only; new code should call
getMinSize instead.
|
void |
invalidateLayout(Container
Invalidates the layout, indicating that if the layout manager has cached information it should be discarded.
|
void |
layoutContainer(Container
Lays out the specified container using this grid bag layout.
|
Point |
location(int x, int y)
Determines which cell in the layout grid contains the point specified by
(x, y).
|
protected GridBagConstraints |
lookupConstraints(Component
Retrieves the constraints for the specified component.
|
Dimension |
maximumLayoutSize(Container
Returns the maximum dimensions for this layout given the components in the specified target container.
|
Dimension |
minimumLayoutSize(Container
Determines the minimum size of the
parent container using this grid bag layout.
|
Dimension |
preferredLayoutSize(Container
Determines the preferred size of the
parent container using this grid bag layout.
|
void |
removeLayoutComponent(Component
Removes the specified component from this layout.
|
void |
setConstraints(Component
Sets the constraints for the specified component in this layout.
|
String |
toString()
Returns a string representation of this grid bag layout's values.
|
protected static final int MAXGRIDSIZE
protected static final int MINSIZE
protected static final int PREFERREDSIZE
protected Hashtable<Component ,GridBagConstraints > comptable
comptable are the components and the values are the instances of
GridBagConstraints.
GridBagConstraints
protected GridBagConstraintsdefaultConstraints
defaultConstraints.
protected GridBagLayoutInfolayoutInfo
layoutInfo is
null this indicates that there are no components in the gridbag or if there are components, they have not yet been validated.
getLayoutInfo(Container, int)
public int[] columnWidths
null the values are applied to the gridbag after all of the minimum columns widths have been calculated. If columnWidths has more elements than the number of columns, columns are added to the gridbag to match the number of elements in columnWidth.
getLayoutDimensions()
public int[] rowHeights
null the values are applied to the gridbag after all of the minimum row heights have been calculated. If
rowHeights has more elements than the number of rows, rows are added to the gridbag to match the number of elements in
rowHeights.
getLayoutDimensions()
public double[] columnWeights
null the values are applied to the gridbag after all of the columns weights have been calculated. If
columnWeights[i] > weight for column i, then column i is assigned the weight in
columnWeights[i]. If
columnWeights has more elements than the number of columns, the excess elements are ignored - they do not cause more columns to be created.
public double[] rowWeights
null the values are applied to the gridbag after all of the rows weights have been calculated. If
rowWeights[i] > weight for row i, then row i is assigned the weight in
rowWeights[i]. If
rowWeights has more elements than the number of rows, the excess elements are ignored - they do not cause more rows to be created.
public void setConstraints(Componentcomp, GridBagConstraints constraints)
comp - the component to be modified
constraints - the constraints to be applied
public GridBagConstraintsgetConstraints(Component comp)
GridBagConstraints object is returned.
comp - the component to be queried
protected GridBagConstraintslookupConstraints(Component comp)
GridBagConstraints object used by the layout mechanism.
If comp is not in the GridBagLayout, a set of default GridBagConstraints are returned. A comp value of null is invalid and returns null.
comp - the component to be queried
public PointgetLayoutOrigin()
ComponentOrientation value of the container. This is distinct from the grid origin given by the cell coordinates (0,0). Most applications do not call this method directly.
ComponentOrientation
public int[][] getLayoutDimensions()
Most applications do not call this method directly.
public double[][] getLayoutWeights()
Most applications do not call this method directly.
public Pointlocation(int x, int y)
(x, y). Each cell is identified by its column index (ranging from 0 to the number of columns minus 1) and its row index (ranging from 0 to the number of rows minus 1).
If the (x, y) point lies outside the grid, the following rules are used. The column index is returned as zero if x lies to the left of the layout for a left-to-right container or to the right of the layout for a right-to-left container. The column index is returned as the number of columns if x lies to the right of the layout in a left-to-right container or to the left in a right-to-left container. The row index is returned as zero if y lies above the layout, and as the number of rows if y lies below the layout. The orientation of a container is determined by its ComponentOrientation property.
x - the
x coordinate of a point
y - the
y coordinate of a point
ComponentOrientation
public void addLayoutComponent(Stringname, Component comp)
addLayoutComponent in interface
LayoutManager
name - the string to be associated with the component
comp - the component to be added
public void addLayoutComponent(Componentcomp, Object constraints)
constraints object. Note that constraints are mutable and are, therefore, cloned when cached.
addLayoutComponent in interface
LayoutManager2
comp - the component to be added
constraints - an object that determines how the component is added to the layout
IllegalArgumentException - if
constraints is not a
GridBagConstraint
public void removeLayoutComponent(Componentcomp)
Most applications do not call this method directly.
removeLayoutComponent in interface
LayoutManager
comp - the component to be removed.
Container.remove(java.awt.Component) ,
Container.removeAll()
public DimensionpreferredLayoutSize(Container parent)
parent container using this grid bag layout.
Most applications do not call this method directly.
preferredLayoutSize in interface
LayoutManager
parent - the container in which to do the layout
parent container
Container.getPreferredSize()
public DimensionminimumLayoutSize(Container parent)
parent container using this grid bag layout.
Most applications do not call this method directly.
minimumLayoutSize in interface
LayoutManager
parent - the container in which to do the layout
parent container
Container.doLayout()
public DimensionmaximumLayoutSize(Container target)
maximumLayoutSize in interface
LayoutManager2
target - the container which needs to be laid out
Container,
minimumLayoutSize(Container),
preferredLayoutSize(Container)
public float getLayoutAlignmentX(Containerparent)
getLayoutAlignmentX in interface
LayoutManager2
0.5f to indicate centered
public float getLayoutAlignmentY(Containerparent)
getLayoutAlignmentY in interface
LayoutManager2
0.5f to indicate centered
public void invalidateLayout(Containertarget)
public void layoutContainer(Containerparent)
GridBagLayout object.
Most applications do not call this method directly.
layoutContainer in interface
LayoutManager
parent - the container in which to do the layout
Container,
Container.doLayout()
public StringtoString()
protected GridBagLayoutInfogetLayoutInfo(Container parent, int sizeflag)
GridBagLayoutInfo for the current set of managed children. This requires three passes through the set of children:
This method should only be used internally by GridBagLayout.
parent - the layout container
sizeflag - either
PREFERREDSIZE or
MINSIZE
GridBagLayoutInfo for the set of children
protected GridBagLayoutInfoGetLayoutInfo(Container parent, int sizeflag)
getLayoutInfo instead. This method is the same as
getLayoutInfo; refer to
getLayoutInfo for details on parameters and return value.
protected void adjustForGravity(GridBagConstraintsconstraints, Rectangle r)
GridBagLayout.
constraints - the constraints to be applied
r - the
Rectangle to be adjusted
protected void AdjustForGravity(GridBagConstraintsconstraints, Rectangle r)
adjustForGravity instead. This method is the same as
adjustForGravity; refer to
adjustForGravity for details on parameters.
protected DimensiongetMinSize(Container parent, GridBagLayoutInfo info)
getLayoutInfo. This method should only be used internally by
GridBagLayout.
parent - the layout container
info - the layout info for this parent
Dimension object containing the minimum size
protected DimensionGetMinSize(Container parent, GridBagLayoutInfo info)
getMinSize instead. This method is the same as
getMinSize; refer to
getMinSize for details on parameters and return value.
protected void arrangeGrid(Containerparent)
GridBagLayout.
parent - the layout container
protected void ArrangeGrid(Containerparent)
arrangeGrid instead. This method is the same as
arrangeGrid; refer to
arrangeGrid for details on the parameter.