【问题标题】:Java Group layout, vertical layout issuesJava Group 布局、垂直布局问题
【发布时间】:2012-07-02 06:56:10
【问题描述】:

我正在尝试制作两列三行的布局。大致如下:

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

然而,即使我很确定这些组管理正确,它仍然会像这样在一行中结束:

我把垂直组分开得很好

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

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    您需要设置容器的布局 - 请参阅下面第三行中的标记 [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 好收获;另请参阅此example,它添加了第三行。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-15
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 2018-07-28
      • 2011-11-18
      • 1970-01-01
      相关资源
      最近更新 更多