user7873835
user7873835

Reputation:

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.

Upvotes: 2

Views: 388

Answers (1)

nIcE cOw
nIcE cOw

Reputation: 24616

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

Upvotes: 2

Related Questions