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

标签 java swing grouplayout

我在 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

谢谢。

好的,这是从上面发布的代码生成的窗口: enter image description here

您可以看到 JSeparator 和 JTextField 之间的空间非常宽。

最佳答案

缺少您的 sscce ,问题似乎出在您未显示的代码中。可能涉及父容器的布局或 pack()。注意JFrame的默认布局是BorderLayout;默认位置是 CENTER。这是一个 sscce用来比较您的代码。

附录:评论说您的 GroupLayout 面板的父级是另一个 JPanel,您提出了以下问题,

Do you know how to make this work in my situation?

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

GroupPanel

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

关于java - 在 Java Swing 中放置 JSeparator 后的间隙大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6769722/

相关文章:

java - 组布局中的 JLabel - 卡住大小

java - 是否可以使用 pack200 创建可执行 jar?

java - setSerializationInclusion(Include.NON_EMPTY) 不排除数组中的空值

java - 如何让一个对象从Java中的LinkedList中删除自己?

java - 列表多态性

java - JFrame 中图像上的 JButton - swing

java - 数组 JLabel ActionListener 多个 JPanel

java - 带图像图标的 JButton "lag"

Java Swing - JTextPane 中插入组件的问题

java - 动态创建的Jlabel的对齐