Java Group布局,垂直布局问题

时间:2012-07-01 16:49:26

标签: java swing vertical-alignment layout-manager grouplayout

我正在尝试制作一个两列,三行布局。有点像:

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

然而,即使我非常确定这些组管理正确,它仍然会在一行中结束: Single Row

我将垂直组分开很好

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))
             );

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您需要设置容器的布局 - 请参阅下面第三行中的标记[1]。 对我来说,看起来你错过了,容器使用了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);

答案 1 :(得分:2)

作为参考,有一个两列,三行布局here的工作示例,如下所示,可能有助于指导您。

image