import javax.swing.*; import java.awt.*; import java.awt.event.*; public class GridBagDemo extends JFrame { private Container container; private GridBagLayout gbLayout; private GridBagConstraints gbConstraints; public GridBagDemo() { super( "GridBagLayout" ); container = getContentPane(); gbLayout = new GridBagLayout(); container.setLayout( gbLayout ); // instantiate gridbag constraints gbConstraints = new GridBagConstraints(); JTextArea ta = new JTextArea( "TextArea1", 5, 10 ); JTextArea tx = new JTextArea( "TextArea2", 2, 2 ); String names[] = { "Iron", "Steel", "Brass" }; JComboBox cb = new JComboBox( names ); JTextField tf = new JTextField( "TextField" ); JButton b1 = new JButton( "Button 1" ); JButton b2 = new JButton( "Button 2" ); JButton b3 = new JButton( "Button 3" ); // 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 ); // combo box // 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 ); // textarea // weightx and weighty are both 0: fill is BOTH addComponent( tx, 3, 2, 1, 1 ); setSize( 300, 150 ); show(); } // 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 ); container.add( c ); // add component } public static void main( String args[] ) { GridBagDemo app = new GridBagDemo(); app.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); } }
A variation of GridBagLayout
does not use the gridx
and gridy
. Rather GridBagConstraints
constants
RELATIVE
and REMAINDER
are used in their place.
RELATIVE
specifies that the next-to-last component in a particular row
should be placed to the right of the previous component in that row. REMAINDER
specifies that a component is the last component in a row. Any component that is not the
second-to-last or last component on a row must specify values for
GridBagConstraints
variables gridwidth
and gridheight
.
import javax.swing.*; import java.awt.*; import java.awt.event.*; public class GridBagDemo2 extends JFrame { private GridBagLayout gbLayout; private GridBagConstraints gbConstraints; private Container container; public GridBagDemo2() { super( "GridBagLayout" ); container = getContentPane(); gbLayout = new GridBagLayout(); container.setLayout( gbLayout ); // instantiate gridbag constraints gbConstraints = new GridBagConstraints(); // create GUI components String metals[] = { "Copper", "Aluminum", "Silver" }; JComboBox comboBox = new JComboBox( metals ); JTextField textField = new JTextField( "TextField" ); String fonts[] = { "Serif", "Monospaced" }; JList list = new JList( fonts ); String names[] = { "zero", "one", "two", "three", "four" }; JButton buttons[] = new JButton[ names.length ]; for ( int i = 0; i < buttons.length; i++ ) buttons[ i ] = new JButton( names[ i ] ); // define GUI component constraints // textField gbConstraints.weightx = 1; gbConstraints.weighty = 1; gbConstraints.fill = GridBagConstraints.BOTH; gbConstraints.gridwidth = GridBagConstraints.REMAINDER; addComponent( textField ); // buttons[0] -- weightx and weighty are 1: fill is BOTH gbConstraints.gridwidth = 1; addComponent( buttons[ 0 ] ); // buttons[1] -- weightx and weighty are 1: fill is BOTH gbConstraints.gridwidth = GridBagConstraints.RELATIVE; addComponent( buttons[ 1 ] ); // buttons[2] -- weightx and weighty are 1: fill is BOTH gbConstraints.gridwidth = GridBagConstraints.REMAINDER; addComponent( buttons[ 2 ] ); // comboBox -- weightx is 1: fill is BOTH gbConstraints.weighty = 0; gbConstraints.gridwidth = GridBagConstraints.REMAINDER; addComponent( comboBox ); // buttons[3] -- weightx is 1: fill is BOTH gbConstraints.weighty = 1; gbConstraints.gridwidth = GridBagConstraints.REMAINDER; addComponent( buttons[ 3 ] ); // buttons[4] -- weightx and weighty are 1: fill is BOTH gbConstraints.gridwidth = GridBagConstraints.RELATIVE; addComponent( buttons[ 4 ] ); // list -- weightx and weighty are 1: fill is BOTH gbConstraints.gridwidth = GridBagConstraints.REMAINDER; addComponent( list ); setSize( 300, 200 ); show(); } // addComponent is programmer-defined private void addComponent( Component c ) { gbLayout.setConstraints( c, gbConstraints ); container.add( c ); // add component } public static void main( String args[] ) { GridBagDemo2 app = new GridBagDemo2(); app.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); } }
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class GridBagWindow extends JFrame { boolean inAnApplet = true; final boolean shouldFill = true; final boolean shouldWeightX = true; public GridBagWindow() { JButton button; Container contentPane = getContentPane(); GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); contentPane.setLayout(gridbag); if (shouldFill) { //natural height, maximum width c.fill = GridBagConstraints.HORIZONTAL; } button = new JButton("Button 1"); if (shouldWeightX) { c.weightx = 0.5; } c.gridx = 0; c.gridy = 0; gridbag.setConstraints(button, c); contentPane.add(button); button = new JButton("2"); c.gridx = 1; c.gridy = 0; gridbag.setConstraints(button, c); contentPane.add(button); button = new JButton("Button 3"); c.gridx = 2; c.gridy = 0; gridbag.setConstraints(button, c); contentPane.add(button); button = new JButton("Long-Named Button 4"); c.ipady = 40; //make this component tall c.weightx = 0.0; c.gridwidth = 3; c.gridx = 0; c.gridy = 1; gridbag.setConstraints(button, c); contentPane.add(button); button = new JButton("Button 5"); c.ipady = 0; //reset to default c.weighty = 1.0; //request any extra vertical space c.anchor = GridBagConstraints.SOUTH; //bottom of space c.insets = new Insets(10,0,0,0); //top padding c.gridx = 1; //aligned with button 2 c.gridwidth = 2; //2 columns wide c.gridy = 2; //third row gridbag.setConstraints(button, c); contentPane.add(button); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { if (inAnApplet) { dispose(); } else { System.exit(0); } } }); } public static void main(String args[]) { GridBagWindow window = new GridBagWindow(); window.inAnApplet = false; window.setTitle("GridBagLayout"); window.pack(); window.setVisible(true); } }
Maintained by John Loomis, last updated 6 July 2000