Mega Code Archive

 
Categories / Java Tutorial / Swing
 

Uses many features

- weights, insets, internal padding, horizontal fill, exact cell positioning, multi-column cells, and anchoring (component positioning within a cell) /*  *  * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.  *  * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,  * modify and redistribute this software in source and binary code form,  * provided that i) this copyright notice and license appear on all copies of  * the software; and ii) Licensee does not utilize the software in a manner  * which is disparaging to Sun.  *  * This software is provided "AS IS," without a warranty of any kind. ALL  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY  * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR  * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE  * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING  * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS  * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,  * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER  * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF  * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE  * POSSIBILITY OF SUCH DAMAGES.  *  * This software is not designed or intended for use in on-line control of  * aircraft, air traffic, aircraft navigation or aircraft communications; or in  * the design, construction, operation or maintenance of any nuclear  * facility. Licensee represents and warrants that it will not use or  * redistribute the Software for such purposes.  */ /*  * GridBagLayoutDemo.java requires no other files.  */ import java.awt.ComponentOrientation; import java.awt.Container; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import javax.swing.JButton; import javax.swing.JFrame; public class GridBagLayoutDemo {   final static boolean shouldFill = true;   final static boolean shouldWeightX = true;   final static boolean RIGHT_TO_LEFT = false;   public static void addComponentsToPane(Container pane) {     if (RIGHT_TO_LEFT) {       pane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);     }     JButton button;     pane.setLayout(new GridBagLayout());     GridBagConstraints c = new GridBagConstraints();     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;     pane.add(button, c);     button = new JButton("Button 2");     c.gridx = 1;     c.gridy = 0;     pane.add(button, c);     button = new JButton("Button 3");     c.gridx = 2;     c.gridy = 0;     pane.add(button, c);     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;     pane.add(button, c);     button = new JButton("5");     c.ipady = 0; // reset to default     c.weighty = 1.0; // request any extra vertical space     c.anchor = GridBagConstraints.PAGE_END; // 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     pane.add(button, c);   }   /**    * Create the GUI and show it. For thread safety, this method should be    * invoked from the event-dispatching thread.    */   private static void createAndShowGUI() {     // Create and set up the window.     JFrame frame = new JFrame("GridBagLayoutDemo");     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     // Set up the content pane.     addComponentsToPane(frame.getContentPane());     // Display the window.     frame.pack();     frame.setVisible(true);   }   public static void main(String[] args) {     // Schedule a job for the event-dispatching thread:     // creating and showing this application's GUI.     javax.swing.SwingUtilities.invokeLater(new Runnable() {       public void run() {         createAndShowGUI();       }     });   } }