【问题标题】:Gap size after placing JSeparator in Java Swing在 Java Swing 中放置 JSeparator 后的间隙大小
【发布时间】:2011-10-09 19:53:10
【问题描述】:

我在 Java Swing 中有一个简单的问题。我将我的代码简化为以下 sn-p。我不确定如何最小化水平 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之间的空间很宽。

【问题讨论】:

  • 我无法从 sn-p 中看到这一点; GroupLayout 不以可读性着称。一些上下文、屏幕截图和sscce 可能会有所帮助。
  • 这是使用 IDE 的陷阱,例如 NetBeans。
  • @Moonbeam:我没有使用 IDE。
  • @李强,那你为什么用GroupLayout?!哇! :)
  • @Moobeam:我认为它是最强大和最灵活的布局管理器。

标签: java swing grouplayout


【解决方案1】:

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

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

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

是的,给封闭的JPanel 一个合适的布局,例如GridLayout 如下图。在这方面,后者的行为与JFrameBorderLayout.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();
            }
        });
    }
}

【讨论】:

  • 感谢您的回复。我其实做了和你不一样的事。我在 JFrame 中使用了 JPanel,而其他一切都在 JPanel 中。换句话说,我为 JPanel1 设置了 GroupLayout,正如您从我的代码中看到的那样。你知道如何在我的情况下完成这项工作吗?
  • 您的情况并没有什么不同:封闭容器需要合适的布局,如上所示。
  • 啊哈,我明白了!您的代码也不起作用!至少不是我想要的那样。如果您调整窗口大小,您会看到与我所附屏幕截图中几乎相同的效果:水平分隔符与 TextField 之间存在很大差距。
  • 我会使用默认的FlowLayoutBoxLayout 和所需的filler
  • 您介意修改上面的代码以使其正常工作吗?我原来的问题仍然存在,我不确定如何解决它。非常感谢。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-22
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 2010-12-28
    • 2011-05-09
    相关资源
    最近更新 更多