Alex Rivera | Logout

Why does GridBagLayout center my components instead of putting it in the corner?

Asked 2011-09-01T19:05:39.820
19

So far I managed to avoid using the GridBagLayout (by hand code) as much as possible, but I could not avoid it this time and I am reading the SUN's tutorial GridBagLayout So far it is not going well. I think I am missunderstanding something.
For example I try the following code (similar to the one in SUN's post):

public class MainFrame extends JFrame { 


    public static void main(String args[]) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    MainFrame frame = new MainFrame();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame
     */
    public MainFrame() {
        super();
        setBounds(100, 100, 500, 375);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Container mainContainer = getContentPane();

        mainContainer.setLayout(new GridBagLayout());       

        //add label
        JLabel someLabel = new JLabel("Label 1:");
        GridBagConstraints constraints = new GridBagConstraints();

        constraints.gridx = 0;
        constraints.gridy = 0;
        //constraints.anchor = GridBagConstraints.FIRST_LINE_START;
        //constraints.weightx = 0.5;
        mainContainer.add(someLabel, constraints);      

        JTextField someText = new JTextField(30);

        constraints = new GridBagConstraints();

        constraints.gridx = 1;
        constraints.gridy = 0;
        constraints.weightx = 0.5;
        mainContainer.add(someText, constraints);

        //
    }

}

I get the label and the textfield one next to the other in the center of the frame.
But I was expecting that they would show up in the top left corner since the gridx and gridy

Edit
Report

1 Answer

14

You need to read further down in the Swing tutorial for the section on weightX/weightY where it states:

Unless you specify at least one non-zero value for weightx or weighty, all the components clump together in the center of their container.

You specified a weightX but not a weightY.

Edit, it's more complicated than I thought. It appears you also need to specify:

constraints.anchor = GridBagConstraints.FIRST_LINE_START;

for both components in addiation to the weighty.

answered 2011-09-01T19:29:15.940

Your Answer