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
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.
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