4

I am trying to make a two column, 3 row layout. Something along the lines of:

----------------------
| Username |Textbox| |
| Email    |Textbox| |
----------------------

Yet even when I'm quite sure the groups managed correctly, it still ends up on a single row like so: Single Row

I have the vertical groups separated just fine

gl_contentPanel.setHorizontalGroup(
        gl_contentPanel.createSequentialGroup()
                  .addGroup(gl_contentPanel.createParallelGroup(GroupLayout.Alignment.LEADING)
                           .addComponent(usernameLabel)
                           .addComponent(emailLabel))
                  .addGroup(gl_contentPanel.createParallelGroup(GroupLayout.Alignment.LEADING)
                           .addComponent(usernames)
                           .addComponent(email))
             );
        gl_contentPanel.setVerticalGroup(
                gl_contentPanel.createSequentialGroup()
                   .addGroup(gl_contentPanel.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(usernameLabel)
                        .addComponent(usernames))
                   .addGroup(gl_contentPanel.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(emailLabel)
                        .addComponent(email))
             );

Any ideas?

mKorbel
  • 109,525
  • 20
  • 134
  • 319
Patrick S
  • 245
  • 1
  • 4
  • 11

2 Answers2

4

You need to set the layout for the container - see mark [1] in the third line below. To me it looks like you missed that and the container uses FlowLayout.

JFrame frame = new JFrame("GroupLayout Test");
GroupLayout gl_contentPanel = new GroupLayout(frame.getContentPane());
frame.setLayout(gl_contentPanel); // [1]

JLabel usernameLabel = new JLabel("User name");
JLabel emailLabel = new JLabel("Email");
JTextField usernames = new JTextField("usernames");
JTextField email = new JTextField("email");

// your snippet
gl_contentPanel.setHorizontalGroup(
        gl_contentPanel.createSequentialGroup()
                  .addGroup(gl_contentPanel.createParallelGroup(GroupLayout.Alignment.LEADING)
                               .addComponent(usernameLabel)
                               .addComponent(emailLabel))
                      .addGroup(gl_contentPanel.createParallelGroup(GroupLayout.Alignment.LEADING)
                               .addComponent(usernames)
                               .addComponent(email))
                 );
    gl_contentPanel.setVerticalGroup(
            gl_contentPanel.createSequentialGroup()
               .addGroup(gl_contentPanel.createParallelGroup(GroupLayout.Alignment.BASELINE)
                    .addComponent(usernameLabel)
                    .addComponent(usernames))
               .addGroup(gl_contentPanel.createParallelGroup(GroupLayout.Alignment.BASELINE)
                    .addComponent(emailLabel)
                    .addComponent(email))
         );
// end of your snippet

frame.pack();
frame.setVisible(true);
Rainer Schwarze
  • 4,725
  • 1
  • 27
  • 49
  • 1
    +1 good catch; see also this [example](http://stackoverflow.com/a/11284874/230513), which adds a third row. – trashgod Jul 01 '12 at 19:12
3

For reference, there's a working example of a two column, three row layout here, illustrated below, that may help guide you.

image

Community
  • 1
  • 1
trashgod
  • 203,806
  • 29
  • 246
  • 1,045