3

我在 Java Swing 中有一个简单的问题。我将代码简化为以下代码段。我不确定如何最小化水平 JSeparator 与下一个 JTextField 之间的间隙大小,因为当前代码在两者之间产生了巨大的间隙。

        GroupLayout layout = new GroupLayout(jPanel1);          
        jPanel1.setLayout(layout);

        layout.setHorizontalGroup(layout.createParallelGroup()
            .addGroup(layout.createSequentialGroup()
                  .addGroup(layout.createSequentialGroup()
                        .addComponent(button)
                      ))
                  .addComponent(jSeparator)
                  .addComponent(jTextField)
            );
        layout.setVerticalGroup(layout.createSequentialGroup()
                .addComponent(button)
                .addComponent(jSeparator)
                .addComponent(jTextField)
            );  

而且一般来说,我怎样才能将间隙大小控制为任何整数表示的值,而不是使用addPreferredGap?

谢谢你。

好的,这是从上面发布的代码生成的窗口: 在此处输入图像描述

可以看到 JSeparator 和 JTextField 之间的空间很宽。

4

2 回答 2

3

没有您的sscce,问题似乎出在您未显示的代码中。父容器的布局或pack()可能涉及。请注意,默认布局JFrameBorderLayout; 默认位置是CENTER. 这是用于比较您的代码的sscce 。

GroupLayout附录:评论您的面板的父级是 another JPanel,您问了以下问题,

你知道如何在我的情况下进行这项工作吗?

是的,给附件JPanel一个合适的布局,例如GridLayout如下所示。后者在这方面BorderLayout.CENTER的行为与 的 非常相似。JFrame

组面板

import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;

/** @see http://stackoverflow.com/questions/6769722 */
public class GroupPanel extends JPanel {

    private final JButton button = new JButton("Start");
    private final JSeparator jSeparator = new JSeparator();
    private final JTextField jTextField = new JTextField(10);

    public GroupPanel() {
        GroupLayout layout = new GroupLayout(this);          
        this.setLayout(layout);
        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);
        layout.setHorizontalGroup(layout.createParallelGroup()
            .addComponent(button)
            .addComponent(jSeparator)
            .addComponent(jTextField)
        );
        layout.setVerticalGroup(layout.createSequentialGroup()
            .addComponent(button, GroupLayout.PREFERRED_SIZE,
                GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
            .addComponent(jSeparator, GroupLayout.PREFERRED_SIZE,
                GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
            .addComponent(jTextField, GroupLayout.PREFERRED_SIZE,
                GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
        );
    }

    private static void display() {
        JFrame f = new JFrame("GroupPanel");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(new GridLayout(1, 0));
        f.add(new GroupPanel());
        f.add(new GroupPanel());
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                display();
            }
        });
    }
}
于 2011-07-21T02:23:13.643 回答
2

在垂直布局中,按以下方式添加分隔符:

addComponent(separator, GroupLayout.PREFERRED_SIZE,
             GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
于 2012-01-13T16:34:58.587 回答