GridLayoutpublic class GridLayout extends Object implements LayoutManager, SerializableThe GridLayout class is a layout manager that
lays out a container's components in a rectangular grid.
The container is divided into equal-sized rectangles,
and one component is placed in each rectangle.
For example, the following is an applet that lays out six buttons
into three rows and two columns:
import java.awt.*;
import java.applet.Applet;
public class ButtonGrid extends Applet {
public void init() {
setLayout(new GridLayout(3,2));
add(new Button("1"));
add(new Button("2"));
add(new Button("3"));
add(new Button("4"));
add(new Button("5"));
add(new Button("6"));
}
}
If the container's ComponentOrientation property is horizontal
and left-to-right, the above example produces the output shown in Figure 1.
If the container's ComponentOrientation property is horizontal
and right-to-left, the example produces the output shown in Figure 2.
|
|
Figure 1: Horizontal, Left-to-Right |
Figure 2: Horizontal, Right-to-Left |
When both the number of rows and the number of columns have
been set to non-zero values, either by a constructor or
by the setRows and setColumns methods, the number of
columns specified is ignored. Instead, the number of
columns is determined from the specified number of rows
and the total number of components in the layout. So, for
example, if three rows and two columns have been specified
and nine components are added to the layout, they will
be displayed as three rows of three columns. Specifying
the number of columns affects the layout only when the
number of rows is set to zero. |
Fields Summary |
---|
private static final long | serialVersionUID | int | hgapThis is the horizontal gap (in pixels) which specifies the space
between columns. They can be changed at any time.
This should be a non-negative integer. | int | vgapThis is the vertical gap (in pixels) which specifies the space
between rows. They can be changed at any time.
This should be a non negative integer. | int | rowsThis is the number of rows specified for the grid. The number
of rows can be changed at any time.
This should be a non negative integer, where '0' means
'any number' meaning that the number of Rows in that
dimension depends on the other dimension. | int | colsThis is the number of columns specified for the grid. The number
of columns can be changed at any time.
This should be a non negative integer, where '0' means
'any number' meaning that the number of Columns in that
dimension depends on the other dimension. |
Constructors Summary |
---|
public GridLayout()Creates a grid layout with a default of one column per component,
in a single row.
this(1, 0, 0, 0);
| public GridLayout(int rows, int cols)Creates a grid layout with the specified number of rows and
columns. All components in the layout are given equal size.
One, but not both, of rows and cols can
be zero, which means that any number of objects can be placed in a
row or in a column.
this(rows, cols, 0, 0);
| public GridLayout(int rows, int cols, int hgap, int vgap)Creates a grid layout with the specified number of rows and
columns. All components in the layout are given equal size.
In addition, the horizontal and vertical gaps are set to the
specified values. Horizontal gaps are placed between each
of the columns. Vertical gaps are placed between each of
the rows.
One, but not both, of rows and cols can
be zero, which means that any number of objects can be placed in a
row or in a column.
All GridLayout constructors defer to this one.
if ((rows == 0) && (cols == 0)) {
throw new IllegalArgumentException("rows and cols cannot both be zero");
}
this.rows = rows;
this.cols = cols;
this.hgap = hgap;
this.vgap = vgap;
|
Methods Summary |
---|
public void | addLayoutComponent(java.lang.String name, java.awt.Component comp)Adds the specified component with the specified name to the layout.
| public int | getColumns()Gets the number of columns in this layout.
return cols;
| public int | getHgap()Gets the horizontal gap between components.
return hgap;
| public int | getRows()Gets the number of rows in this layout.
return rows;
| public int | getVgap()Gets the vertical gap between components.
return vgap;
| public void | layoutContainer(java.awt.Container parent)Lays out the specified container using this layout.
This method reshapes the components in the specified target
container in order to satisfy the constraints of the
GridLayout object.
The grid layout manager determines the size of individual
components by dividing the free space in the container into
equal-sized portions according to the number of rows and columns
in the layout. The container's free space equals the container's
size minus any insets and any specified horizontal or vertical
gap. All components in a grid layout are given the same size.
synchronized (parent.getTreeLock()) {
Insets insets = parent.getInsets();
int ncomponents = parent.getComponentCount();
int nrows = rows;
int ncols = cols;
boolean ltr = parent.getComponentOrientation().isLeftToRight();
if (ncomponents == 0) {
return;
}
if (nrows > 0) {
ncols = (ncomponents + nrows - 1) / nrows;
} else {
nrows = (ncomponents + ncols - 1) / ncols;
}
int w = parent.width - (insets.left + insets.right);
int h = parent.height - (insets.top + insets.bottom);
w = (w - (ncols - 1) * hgap) / ncols;
h = (h - (nrows - 1) * vgap) / nrows;
if (ltr) {
for (int c = 0, x = insets.left ; c < ncols ; c++, x += w + hgap) {
for (int r = 0, y = insets.top ; r < nrows ; r++, y += h + vgap) {
int i = r * ncols + c;
if (i < ncomponents) {
parent.getComponent(i).setBounds(x, y, w, h);
}
}
}
} else {
for (int c = 0, x = parent.width - insets.right - w; c < ncols ; c++, x -= w + hgap) {
for (int r = 0, y = insets.top ; r < nrows ; r++, y += h + vgap) {
int i = r * ncols + c;
if (i < ncomponents) {
parent.getComponent(i).setBounds(x, y, w, h);
}
}
}
}
}
| public java.awt.Dimension | minimumLayoutSize(java.awt.Container parent)Determines the minimum size of the container argument using this
grid layout.
The minimum width of a grid layout is the largest minimum width
of all of the components in the container times the number of columns,
plus the horizontal padding times the number of columns minus one,
plus the left and right insets of the target container.
The minimum height of a grid layout is the largest minimum height
of all of the components in the container times the number of rows,
plus the vertical padding times the number of rows minus one, plus
the top and bottom insets of the target container.
synchronized (parent.getTreeLock()) {
Insets insets = parent.getInsets();
int ncomponents = parent.getComponentCount();
int nrows = rows;
int ncols = cols;
if (nrows > 0) {
ncols = (ncomponents + nrows - 1) / nrows;
} else {
nrows = (ncomponents + ncols - 1) / ncols;
}
int w = 0;
int h = 0;
for (int i = 0 ; i < ncomponents ; i++) {
Component comp = parent.getComponent(i);
Dimension d = comp.getMinimumSize();
if (w < d.width) {
w = d.width;
}
if (h < d.height) {
h = d.height;
}
}
return new Dimension(insets.left + insets.right + ncols*w + (ncols-1)*hgap,
insets.top + insets.bottom + nrows*h + (nrows-1)*vgap);
}
| public java.awt.Dimension | preferredLayoutSize(java.awt.Container parent)Determines the preferred size of the container argument using
this grid layout.
The preferred width of a grid layout is the largest preferred
width of all of the components in the container times the number of
columns, plus the horizontal padding times the number of columns
minus one, plus the left and right insets of the target container.
The preferred height of a grid layout is the largest preferred
height of all of the components in the container times the number of
rows, plus the vertical padding times the number of rows minus one,
plus the top and bottom insets of the target container.
synchronized (parent.getTreeLock()) {
Insets insets = parent.getInsets();
int ncomponents = parent.getComponentCount();
int nrows = rows;
int ncols = cols;
if (nrows > 0) {
ncols = (ncomponents + nrows - 1) / nrows;
} else {
nrows = (ncomponents + ncols - 1) / ncols;
}
int w = 0;
int h = 0;
for (int i = 0 ; i < ncomponents ; i++) {
Component comp = parent.getComponent(i);
Dimension d = comp.getPreferredSize();
if (w < d.width) {
w = d.width;
}
if (h < d.height) {
h = d.height;
}
}
return new Dimension(insets.left + insets.right + ncols*w + (ncols-1)*hgap,
insets.top + insets.bottom + nrows*h + (nrows-1)*vgap);
}
| public void | removeLayoutComponent(java.awt.Component comp)Removes the specified component from the layout.
| public void | setColumns(int cols)Sets the number of columns in this layout to the specified value.
Setting the number of columns has no affect on the layout
if the number of rows specified by a constructor or by
the setRows method is non-zero. In that case, the number
of columns displayed in the layout is determined by the total
number of components and the number of rows specified.
if ((cols == 0) && (this.rows == 0)) {
throw new IllegalArgumentException("rows and cols cannot both be zero");
}
this.cols = cols;
| public void | setHgap(int hgap)Sets the horizontal gap between components to the specified value.
this.hgap = hgap;
| public void | setRows(int rows)Sets the number of rows in this layout to the specified value.
if ((rows == 0) && (this.cols == 0)) {
throw new IllegalArgumentException("rows and cols cannot both be zero");
}
this.rows = rows;
| public void | setVgap(int vgap)Sets the vertical gap between components to the specified value.
this.vgap = vgap;
| public java.lang.String | toString()Returns the string representation of this grid layout's values.
return getClass().getName() + "[hgap=" + hgap + ",vgap=" + vgap +
",rows=" + rows + ",cols=" + cols + "]";
|
|