首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java Swing中放置JSeparator后的间隙大小

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

Stack Overflow用户
提问于 2011-07-21 07:27:24
回答 2查看 4.5K关注 0票数 3

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

代码语言:javascript
复制
        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之间的空间非常宽。

EN

回答 2

Stack Overflow用户

发布于 2011-07-21 10:23:14

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

附录:在评论您的GroupLayout面板的父面板是另一个JPanel时,您询问了以下内容:

你知道如何在我的情况下工作吗?

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

代码语言:javascript
复制
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();
            }
        });
    }
}
票数 3
EN

Stack Overflow用户

发布于 2012-01-14 00:34:59

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

代码语言:javascript
复制
addComponent(separator, GroupLayout.PREFERRED_SIZE,
             GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6769722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档