如何在框架和组件之间有间隙?

Posted

技术标签:

【中文标题】如何在框架和组件之间有间隙?【英文标题】:How to have gap between the frame and a component? 【发布时间】:2020-06-22 18:22:54 【问题描述】:

我正在尝试练习我的 GUI,但在组件和框架之间设置间隙时遇到了麻烦。

上图是我目前所拥有的。但我真的想在框架的左侧和“label1”之间留一个间隙。

private void initialize() 
    frame = new JFrame();
    frame.setTitle("WINDOW");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(500, 300);

    panel = new JPanel();
    panel.setLayout(new BorderLayout());

    bottomPanel = new JPanel();
    bottomPanel.setLayout(new GridLayout(1, 5));
    l1 = new JLabel("Label1");
    l2 = new JLabel("Label2");
    l3 = new JLabel("Label3");
    l4 = new JLabel("Label4");
    l5 = new JLabel("Label5");
    bottomPanel.add(l1);
    bottomPanel.add(l2);
    bottomPanel.add(l3);
    bottomPanel.add(l4);
    bottomPanel.add(l5);

    panel.add(bottomPanel, BorderLayout.SOUTH);
    frame.add(panel);

以上是我的部分代码。我试着做: bottomPanel.setLayout(new GridLayout(1, 5, -20, 0)); 放置一些水平间隙,但这只会增加组件之间的间隙。这根本没有将“label1”从框架中移开。有没有其他方法可以做到这一点?我对 Java 很陌生,所以我不太了解其他技巧。我将不胜感激任何帮助!谢谢!

【问题讨论】:

【参考方案1】:

其他答案是在调整 GUI 大小时无法达到预期效果的软糖。而是使用:

JLabel.setHorizontalAlignment(SwingConstants.CENTER);

通过使JLabel 中的文本居中,并结合GridLayout 将组件拉伸到单元格的整个宽度,每个标签将在GUI 允许的范围内拥有尽可能多的空间。例如。这是 GUI 最小尺寸时的效果。

当拉得更宽时:

(添加红色边框以显示每个标签的边界。)

【讨论】:

【参考方案2】:

在面板中添加Border

bottomPanel = new JPanel();
bottomPanel.setBorder( new EmptyBorder(0, 10, 0, 0) );

阅读 How to Use Borders 上的 Swing 教程部分,了解有关您可以创建的不同边框的更多信息。

【讨论】:

【参考方案3】:

尝试以下方法: bottomPanel.add(javax.swing.Box.createHorizo​​ntalStrut(10));

【讨论】:

创建一个 Swing 组件比仅仅绘制一个 Border 需要更多的资源。此外,由于面板使用的是 GridLayout,因此无法控制空白空间的大小,因为它将自动与网格中的其他组件大小相同。

以上是关于如何在框架和组件之间有间隙?的主要内容,如果未能解决你的问题,请参考以下文章

如何消除页脚和页面内容之间的间隙

如何在弹性容器中设置间隙(排水沟)?

如何在 Elementor 中删除小部件和布局子项之间的间隙/空间?

如何使用自动布局在对象之间创建间隙

为啥我的标志和导航栏之间有巨大的可点击间隙以及如何摆脱它?

如何管理自动布局中两个视图之间的间隙