在Java Swing中放置JSepator后的间隙大小

在Java Swing中放置JSepator后的间隙大小,java,swing,grouplayout,Java,Swing,Grouplayout,我在JavaSwing中遇到了一个简单的问题。我将代码简化为以下代码片段。我不确定如何最小化水平JSepator与下一个JTextField之间的间隙大小,因为当前代码在这两者之间产生了巨大的间隙 GroupLayout layout = new GroupLayout(jPanel1); jPanel1.setLayout(layout); layout.setHorizontalGroup(layout.createPar

我在JavaSwing中遇到了一个简单的问题。我将代码简化为以下代码片段。我不确定如何最小化水平JSepator与下一个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

多谢各位

好的,这是根据上面发布的代码生成的窗口:

您可以看到jsepator和JTextField之间的空间非常大。

如果没有您的,问题似乎出在您没有显示的代码中。可能涉及父容器的布局或
pack()
。请注意,
JFrame
的默认布局是
BorderLayout
;默认位置为
中心
。下面是一个比较代码的示例

附录:关于您的
GroupLayout
面板的父面板是另一个
JPanel
,您提出了以下问题:

在我的情况下,你知道怎么做吗

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

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


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

addComponent(separator, GroupLayout.PREFERRED_SIZE,
             GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)

我很难从一个片段中看到这一点<代码>组布局的可读性未知。一些上下文,一个屏幕截图,可能会有帮助。这是使用IDE(如NetBeans)的陷阱。@Moonbeam:我没有使用IDE。@Qiang Li,那你为什么要使用
GroupLayout
?!哎呀!:)@我认为它是最强大、最灵活的布局管理器。谢谢你的回复。我确实做了一些与你不同的事情。我在JFrame中使用了一个JPanel,而其他所有东西都在JPanel中。换句话说,我为JPanel1设置了GroupLayout,您可以从我的代码中看到这一点。你知道如何在我的情况下做到这一点吗?你的情况并没有什么不同:封闭容器需要一个合适的布局,如上图所示。啊哈,我明白了!你的代码也不起作用!至少不是我想要的那样。如果调整窗口的大小,您会看到与我附加的屏幕截图中几乎相同的效果:水平分隔符与文本字段之间有很大的间隙。我会使用默认的
FlowLayout
BoxLayout
。您介意修改上面的代码以使其正常工作吗?我原来的问题仍然存在,我不知道如何解决它。非常感谢。