Search code examples
javaswingform-layout

How to combine two grid position in Java?


I want to know how do you combine or merge two grid position using Java grid layout. I am creating a basic java application using the java grid layout(0, 2) with my JFrame and java form components like JLabel and JButton. I want to combine the top two cells to displays my title in the center of the application.


Solution

  • You can use GridBagLayout

    /*
     * GridBagLayoutDemo.java is a 1.4 application that requires no other files.
     */
    
    import java.awt.*;
    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() {
            //Make sure we have nice window decorations.
            JFrame.setDefaultLookAndFeelDecorated(true);
    
            //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();
                }
            });
        }
    }
    

    In the above code Long Named Button 4 is spanned across 3 columns.
    Reference:- How to use GridBagLayout