How to align components center in the JPanel using GridBagLayout?
Asked Answered
U

1

7

When I try to align my component it goes either left side or right side.

So I just want the solution to get rid of this problem, and also tell me how set the size of the panel as 400 x 350 pixel.

enter image description here

Here is my code....titleLabel and ResultLabel should be aligned in center

public TimeGui() {

    layout = new GridBagLayout();
    setSize(400, 350);  //**Its not working**
    setBackground(Color.LIGHT_GRAY);
    setBorder(BorderFactory.createLineBorder(Color.BLACK));
    setBorder(new TitledBorder(new EtchedBorder(), "Time Conversion") );

    setLayout(layout);
    layoutConstraints = new GridBagConstraints();       
    textField1 = new JTextField(10);
    textField2 = new JTextField(10);

    String[] names1 = {"Seconds", "Minutes", "Hours", "Days", "Weeks"};


    comboBox1 = new JComboBox<>(names1);
    comboBox2 = new JComboBox<>(names1);

    titleLabel = new JLabel("Time Conversion Unit", JLabel.CENTER);
    resultLabel = new JLabel("Result Label");
    equalLabel = new JLabel("=");

    convertButton = new JButton("Convert");


    layoutConstraints.fill = GridBagConstraints.HORIZONTAL;
    Insets inset = new Insets(10, 10, 10, 10);
    layoutConstraints.anchor = GridBagConstraints.CENTER;

    addComponent(titleLabel, 0, 0, 2, 2, inset ); // I tried (0,1,2,2) 



    addComponent(comboBox1, 3, 0, 2, 3, inset);

    addComponent(comboBox2, 3, 2, 2, 3, inset);

    addComponent(textField1, 6, 0, 1, 2, inset);

    addComponent(equalLabel, 6, 1, 1, 2, inset);

    addComponent(textField2, 6, 2, 1, 2, inset);

    addComponent(resultLabel, 8, 1, 2, 1, inset);

    addComponent(convertButton, 10, 0, 2, 2, inset);

}

private void addComponent(Component component, int row,
        int column, int width, int height, Insets inset1) {
    layoutConstraints.gridx = column;
    layoutConstraints.gridy = row;
    layoutConstraints.gridwidth = width;
    layoutConstraints.gridheight = height;
    layoutConstraints.insets = inset1;
    layout.setConstraints(component, layoutConstraints);
    add(component);
}
}
Unconditioned answered 14/6, 2013 at 5:18 Comment(2)
In the absence of the image, it would be wise, if atleast you can provide one SSCCE, so that one can atleast run it without any sort of addition. Just upload your image to any site, like imgur, dropbox or 4shared. Any one with higher privilege will add that to your questionVieira
ok just tell me how to set the size of the panel.Unconditioned
H
4

The problem is with your gridwidth and your fill properties...

enter image description hereenter image description here

Basically all I changed was...

addComponent(titleLabel, 0, 0, GridBagConstraints.REMAINDER, 2, inset); // I tried (0,1,2,2) 
addComponent(comboBox1, 3, 0, 1, 3, inset);
addComponent(comboBox2, 3, 2, 1, 3, inset);
addComponent(textField1, 6, 0, 1, 2, inset);
addComponent(equalLabel, 6, 1, 1, 2, inset);
addComponent(textField2, 6, 2, 1, 2, inset);
layoutConstraints.fill = GridBagConstraints.NONE;
addComponent(resultLabel, 8, 0, GridBagConstraints.REMAINDER, 1, inset);
addComponent(convertButton, 10, 0, GridBagConstraints.REMAINDER, 2, inset);

You could play around with a few of the others.

As for defining the actual size of the panel, the best you can do is to override the getPreferredSize method of the TimeGui...

@Override
public Dimension getPreferredSize() {
    return new Dimension(400, 350);
}

Which will "suggest" to the parent container what size you would like to be laid out to. Just remember, this is an optional value and layout managers are well within there rights to ignore it.

Helminthic answered 14/6, 2013 at 5:45 Comment(3)
That depends on what layout manager you are using to display it. Start by overriding the getPreferredSize as mentioned in the bottom of my answerHelminthic
Hello MadProgrammer still I'm struggling to set component size.Unconditioned
I wrote getPreferredSize method for Jpanel but I'm not able write for components. How do I solve this...Unconditioned

© 2022 - 2024 — McMap. All rights reserved.