by Dinesh Thakur

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.
GridBagConstraints.NONE retains the original size: Default
GridBagConstraints.HORIZONTAL expanded horizontally
GridBagConstraints.VERTICAL GridBagConstraints.BOTH expanded vertically expanded to the dimensions of the 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);
       }
  }

GridBagLayout in Java Example