]// Fig. 11.20: GridBagDemo.java
// Demonstrating GridBagLayout.
import java.applet.Applet;
import java.awt.*;

public class GridBagDemo extends Applet { 
   private Canvas c;
   private Choice cb;
   private TextArea ta;
   private TextField tf;
   private Button b1, b2, b3;
   private GridBagLayout gbLayout;
   private GridBagConstraints gbConstraints; 
    
   public void init()
   {
      gbLayout = new GridBagLayout();
      setLayout( gbLayout );   // applet

      // instantiate gridbag constraints
      gbConstraints = new GridBagConstraints();

      ta = new TextArea( "Text Area", 5, 10 );
      cb = new Choice( );
      cb.add( "Linden" );
      cb.add( "Birch" );
      cb.add( "Ceder" );
      tf = new TextField( "TextField" );
      b1 = new Button( "Button 1" );
      b2 = new Button( "Button 2" );
      b3 = new Button( "Button 3" );
      c = new Canvas();
      c.setBackground( Color.blue );
      c.setSize( 10, 5 );

      // text area
      // weightx and weighty are both 0: the default
      // anchor for all components is CENTER: the default
      gbConstraints.fill = GridBagConstraints.BOTH;
      addComponent( ta, 0, 0, 1, 3 );    
       
      // button b1
      // weightx and weighty are both 0: the default
      gbConstraints.fill = GridBagConstraints.HORIZONTAL;
      addComponent( b1, 0, 1, 2, 1 );
      
      // choice button
      // weightx and weighty are both 0: the default
      // fill is HORIZONTAL
      addComponent( cb, 2, 1, 2, 1 );             

      // button b2
      gbConstraints.weightx = 1000;  // can grow wider
      gbConstraints.weighty = 1;     // can grow taller
      gbConstraints.fill = GridBagConstraints.BOTH;
      addComponent( b2, 1, 1, 1, 1 );
       
      // button b3
      // fill is BOTH
      gbConstraints.weightx = 0;
      gbConstraints.weighty = 0;    
      addComponent( b3, 1, 2, 1, 1 );
       
      // textfield
      // weightx and weighty are both 0: fill is BOTH
      addComponent( tf, 3, 0, 2, 1 );

      // canvas
      // weightx and weighty are both 0: fill is BOTH
      addComponent( c, 3, 2, 1, 1 );    
   }

   // addComponent is programmer defined
   private void addComponent( Component c, int row, int column,
                              int width, int height )
   {
      // set gridx and gridy 
      gbConstraints.gridx = column;
      gbConstraints.gridy = row;

      // set gridwidth and gridheight
      gbConstraints.gridwidth = width;   
      gbConstraints.gridheight = height;

      // set constraints
      gbLayout.setConstraints( c, gbConstraints );  
      add( c );      // add component to applet
   }
}
