Search code examples
javaswinglayout-managergridbaglayout

how to change minimum Height of a grid in gridbag layout


Here i am using gridbag layout on a panel to add 5 components arranged in 5 rows, i want them to have different height like this but after doing this

public void mainpanel3(){

   pupper.setBackground(Color.yellow);
   ptable.setBackground(Color.BLACK);
   lthird.setOpaque(true);
   lthird.setBackground(Color.BLUE);
   tffourth.setBackground(Color.GREEN);
   pfifth.setBackground(Color.WHITE);


   outerp3.setLayout(new GridBagLayout());
   GridBagConstraints c=new GridBagConstraints();


   c.weightx=0.5;
   c.weighty=0.5;
   c.fill=GridBagConstraints.BOTH;

   c.weightx=0.5;
   c.weighty=0.1;
   c.ipady=5;
   c.gridx=0;
   c.gridy=0;       
   outerp3.add(pupper,c);

   c.weightx=0.5;
   c.weighty=0.4;
   c.ipady=20;
   c.gridx=0;
   c.gridy=1;
   outerp3.add(ptable,c);

   c.weightx=0.5;
   c.weighty=0.1;
   c.ipady=5;
   c.gridx=0;
   c.gridy=2;
   outerp3.add(lthird,c);

   c.weightx=0.5;
   c.weighty=0.1;
   c.ipady=5;
   c.gridx=0;
   c.gridy=3;
   outerp3.add(tffourth,c);

   c.weightx=0.5;
   c.weighty=0.1;
   c.ipady=5;
   c.gridx=0;
   c.gridy=4;
   outerp3.add(pfifth,c);

    }

This happens

output

the fifth component(a panel) color white do not shows up.

Coding about this panel is done in this method only, let me know if you need any other piece of code.


Solution

  • You need to specify weighty values, though weightx will always be 1.0 for each component, since each component differ only in terms of it's height but not width. Here is a working example:

    import java.awt.*;
    import javax.swing.*;
    
    public class GridBagLayoutExample {
    
        private GridBagConstraints m_GBC;
    
        public GridBagLayoutExample () {
            m_GBC = new GridBagConstraints ();
            m_GBC.anchor = GridBagConstraints.FIRST_LINE_START;
            m_GBC.fill = GridBagConstraints.BOTH;
        }
    
        private void displayGUI () {
            JFrame frame = new JFrame ( "GridBagLayout Example" );
            frame.setDefaultCloseOperation ( JFrame.DISPOSE_ON_CLOSE );
    
            JPanel contentPane = new JPanel ();
            contentPane.setLayout ( new GridBagLayout () );
    
            addComponent ( contentPane, getPanel (), 0, 0, 1, 1, 1.0, 0.1 );
            addComponent ( contentPane, getPanel (), 0, 1, 1, 5, 1.0, 0.5 );
            addComponent ( contentPane, getPanel (), 0, 6, 1, 1, 1.0, 0.1 );
            addComponent ( contentPane, getPanel (), 0, 7, 1, 2, 1.0, 0.2 );
            addComponent ( contentPane, getPanel (), 0, 9, 1, 1, 1.0, 0.1 );
    
            frame.setContentPane ( contentPane );
            frame.pack ();
            frame.setLocationByPlatform ( true );
            frame.setVisible ( true );
        }
    
        private void addComponent ( JComponent contentPane, JComponent component,
                                    int x, int y, int gridwidth, int gridheight,
                                    double weightx, double weighty ) {
            m_GBC.gridx = x;
            m_GBC.gridy = y;
            m_GBC.gridwidth = gridwidth;
            m_GBC.gridheight = gridheight;
            m_GBC.weightx = weightx;
            m_GBC.weighty = weighty;
    
            contentPane.add ( component, m_GBC );
        }
    
        private JPanel getPanel () {
            JPanel panel = new JPanel ();
            panel.setOpaque ( true );
            Color color = new Color ( ( float ) Math.random (), ( float ) Math.random (),
                                    ( float ) Math.random (), ( float ) Math.random () );
            panel.setBackground ( color );
    
            return panel;
        }
    
        public static void main ( String [] args ) {
            Runnable runnable = new Runnable () {
                @Override
                public void run () {
                    new GridBagLayoutExample ().displayGUI ();
                }
            };
            EventQueue.invokeLater ( runnable );
        }
    }
    

    OUTPUT

    img