The java.awt.GridBagLayout layout manager is the most powerful and flexible of all the predefined layout managers but more complicated to use. Unlike GridLayout where the component are arranged in a rectangular grid and each component in the container is forced to be the same size, in GridBagLayout, components are also arranged in rectangular grid but can have different sizes and can occupy multiple rows or columns.
In order to create GridBagLayout, we first instantiate the GridBagLayout class by using its only no-arg constructor
public GridLayout();
and defining it as the current layout manager. The following statements accomplish this task;
GridBagLayout layout = new GridBagLayout();
setLayout(layout);
A GridBagLayout layout manager requires a lot of information to know where to put a component in a container. A helper class called GridBagConstraints provides all this information. It specifies constraints on how to position a component, how to distribute the component and how to resize and align them. Each component in a GridBagLayout has its own set of constraints, so you have to associate an object of type GridBagConstraints with each component before adding component to the container.
Instance variables to manipulate the GridBagLayout object Constraints are:
Variable | Role |
gridx and gridy | These contain the coordinates of the origin of the grid. They allow a at a specific position of a component positioning. By default, they have GrigBagConstraint.RELATIVE value which indicates that a component can be stored to the right of previous |
gridwidth, gridheight | Define how many cells will occupy component (height and width). by The default is 1. The indication is relative to the other components of the line or the column. The GridBagConstraints.REMAINDER value specifies that the next component inserted will be the last of the line or the current column. the value GridBagConstraints.RELATIVE up the component after the last component of a row or column. |
fill | Defines the fate of a component smaller than the grid cell. |
ipadx, ipady | Used to define the horizontal and vertical expansion of components. not works if expansion is required by fill. The default value is (0,0). |
anchor | When a component is smaller than the cell in which it is inserted, it can be positioned using this variable to define the side from which the control should be aligned within the cell. Possible variables NORTH, NORTHWEST, NORTHEAST, SOUTH, SOUTHWEST, SOUTHEAST, WEST and EAST |
weightx, weighty | Used to define the distribution of space in case of change of dimension |
import java.awt.*;
class GridBagLayoutExample extends Frame
{
GridBagLayoutExample()
{
Label lblName = new Label("Name");
TextField txtName =new TextField(10);
Label lblcomments = new Label("Comments");
TextArea TAreaComments=new TextArea(6,15);
Button btnSubmit = new Button("Submit");
setLayout(new GridBagLayout());
GridBagConstraints gc =new GridBagConstraints();
add(lblName,gc,0,0,1,1,0,0);
add(txtName,gc,1,0,1,1,0,20);
add(lblcomments,gc,0,1,1,1,0,0);
add(TAreaComments,gc,1,1,1,1,0,60);
add(btnSubmit,gc,0,2,2,1,0,20);
}
void add(Component comp,GridBagConstraints gc,int x,int y,int w,int h,int wx,int wy)
{
gc.gridx = x;
gc.gridy = y;
gc.gridwidth = w;
gc.gridheight= h;
gc.weightx = wx;
gc.weighty = wy;
add(comp,gc);
}
}
class GridBagLayoutJavaExample
{
public static void main(String args[])
{
GridBagLayoutExample frame = new GridBagLayoutExample();
frame.setTitle("GridBagLayout in Java Example");
frame.setSize(300,200);
frame.setVisible(true);
}
}