# Class GridLayout

java.lang.Object
java.awt.GridLayout

All Implemented Interfaces:
  `LayoutManager, Serializable`

public class GridLayout extends Object implements LayoutManager, Serializable
The `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 a window that lays out six buttons into three rows and two columns:

    import java.awt.Button;
    import java.awt.EventQueue;
    import java.awt.Frame;
    import java.awt.GridLayout;

    public class GridLayoutExample {

        public static void main(String[] args) throws Exception {
            EventQueue.invokeAndWait(() -> {
                Frame frame = new Frame("GridLayout");
                frame.setLayout(new GridLayout(3, 2));
                frame.add(new Button("1"));
                frame.add(new Button("2"));
                frame.add(new Button("3"));
                frame.add(new Button("4"));
                frame.add(new Button("5"));
                frame.add(new Button("6"));
                frame.setSize(200, 200);
                frame.setVisible(true);
            });
        }
    }

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.

Since:
  1.0
See Also:
  - Serialized Form

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `GridLayout()`
  Creates a grid layout with a default of one column per component, in a single row.
  `GridLayout(int rows, int cols)`
  Creates a grid layout with the specified number of rows and columns.
  `GridLayout(int rows, int cols, int hgap, int vgap)`
  Creates a grid layout with the specified number of rows and columns.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addLayoutComponent(String name, Component comp)`
  Adds the specified component with the specified name to the layout.
  `int`
  `getColumns()`
  Gets the number of columns in this layout.
  `int`
  `getHgap()`
  Gets the horizontal gap between components.
  `int`
  `getRows()`
  Gets the number of rows in this layout.
  `int`
  `getVgap()`
  Gets the vertical gap between components.
  `void`
  `layoutContainer(Container parent)`
  Lays out the specified container using this layout.
  `Dimension`
  `minimumLayoutSize(Container parent)`
  Determines the minimum size of the container argument using this grid layout.
  `Dimension`
  `preferredLayoutSize(Container parent)`
  Determines the preferred size of the container argument using this grid layout.
  `void`
  `removeLayoutComponent(Component comp)`
  Removes the specified component from the layout.
  `void`
  `setColumns(int cols)`
  Sets the number of columns in this layout to the specified value.
  `void`
  `setHgap(int hgap)`
  Sets the horizontal gap between components to the specified value.
  `void`
  `setRows(int rows)`
  Sets the number of rows in this layout to the specified value.
  `void`
  `setVgap(int vgap)`
  Sets the vertical gap between components to the specified value.
  `String`
  `toString()`
  Returns the string representation of this grid layout's values.

  ### Methods declared in class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected Object`
  `clone()`
  Creates and returns a copy of this object.
  `boolean`
  `equals(Object obj)`
  Indicates whether some other object is "equal to" this one.
  `protected void`
  `finalize()`
  Deprecated, for removal: This API element is subject to removal in a future version.
  Finalization is deprecated and subject to removal in a future release.
  `final Class<?>`
  `getClass()`
  Returns the runtime class of this `Object`.
  `int`
  `hashCode()`
  Returns a hash code value for this object.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `final void`
  `wait()`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
  `final void`
  `wait(long timeoutMillis)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
  `final void`
  `wait(long timeoutMillis, int nanos)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

- ## Constructor Details

  - ### GridLayout

    public GridLayout()
    Creates a grid layout with a default of one column per component, in a single row.
    Since:
      1.1

  - ### GridLayout

    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.

    Parameters:
      `rows` - the rows, with the value zero meaning any number of rows.
      `cols` - the columns, with the value zero meaning any number of columns.

  - ### GridLayout

    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.

    Parameters:
      `rows` - the rows, with the value zero meaning any number of rows
      `cols` - the columns, with the value zero meaning any number of columns
      `hgap` - the horizontal gap
      `vgap` - the vertical gap
    Throws:
      `IllegalArgumentException` - if the value of both `rows` and `cols` is set to zero

- ## Method Details

  - ### getRows

    public int getRows()
    Gets the number of rows in this layout.
    Returns:
      the number of rows in this layout
    Since:
      1.1

  - ### setRows

    public void setRows(int rows)
    Sets the number of rows in this layout to the specified value.
    Parameters:
      `rows` - the number of rows in this layout
    Throws:
      `IllegalArgumentException` - if the value of both `rows` and `cols` is set to zero
    Since:
      1.1

  - ### getColumns

    public int getColumns()
    Gets the number of columns in this layout.
    Returns:
      the number of columns in this layout
    Since:
      1.1

  - ### setColumns

    public void setColumns(int cols)
    Sets the number of columns in this layout to the specified value. Setting the number of columns has no effect 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.
    Parameters:
      `cols` - the number of columns in this layout
    Throws:
      `IllegalArgumentException` - if the value of both `rows` and `cols` is set to zero
    Since:
      1.1

  - ### getHgap

    public int getHgap()
    Gets the horizontal gap between components.
    Returns:
      the horizontal gap between components
    Since:
      1.1

  - ### setHgap

    public void setHgap(int hgap)
    Sets the horizontal gap between components to the specified value.
    Parameters:
      `hgap` - the horizontal gap between components
    Since:
      1.1

  - ### getVgap

    public int getVgap()
    Gets the vertical gap between components.
    Returns:
      the vertical gap between components
    Since:
      1.1

  - ### setVgap

    public void setVgap(int vgap)
    Sets the vertical gap between components to the specified value.
    Parameters:
      `vgap` - the vertical gap between components
    Since:
      1.1

  - ### addLayoutComponent

    public void addLayoutComponent(String name, Component comp)
    Adds the specified component with the specified name to the layout.
    Specified by:
      `addLayoutComponent` in interface `LayoutManager`
    Parameters:
      `name` - the name of the component
      `comp` - the component to be added

  - ### removeLayoutComponent

    public void removeLayoutComponent(Component comp)
    Removes the specified component from the layout.
    Specified by:
      `removeLayoutComponent` in interface `LayoutManager`
    Parameters:
      `comp` - the component to be removed

  - ### preferredLayoutSize

    public Dimension preferredLayoutSize(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.

    Specified by:
      `preferredLayoutSize` in interface `LayoutManager`
    Parameters:
      `parent` - the container in which to do the layout
    Returns:
      the preferred dimensions to lay out the subcomponents of the specified container
    See Also:
      - `minimumLayoutSize(Container)`
      - `Container.getPreferredSize()`

  - ### minimumLayoutSize

    public Dimension minimumLayoutSize(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.

    Specified by:
      `minimumLayoutSize` in interface `LayoutManager`
    Parameters:
      `parent` - the container in which to do the layout
    Returns:
      the minimum dimensions needed to lay out the subcomponents of the specified container
    See Also:
      - `preferredLayoutSize(Container)`
      - `Container.doLayout()`

  - ### layoutContainer

    public void layoutContainer(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.

    Specified by:
      `layoutContainer` in interface `LayoutManager`
    Parameters:
      `parent` - the container in which to do the layout
    See Also:
      - `Container`
      - `Container.doLayout()`

  - ### toString

    public String toString()
    Returns the string representation of this grid layout's values.
    Overrides:
      `toString` in class `Object`
    Returns:
      a string representation of this grid layout