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,107
  • 18
  • 130
  • 305
Patrick S
  • 235
  • 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,577
  • 1
  • 26
  • 46
  • 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
  • 200,320
  • 28
  • 229
  • 974