如何在框架和组件之间有间隙?
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.createHorizontalStrut(10));
【讨论】:
创建一个 Swing 组件比仅仅绘制一个 Border 需要更多的资源。此外,由于面板使用的是 GridLayout,因此无法控制空白空间的大小,因为它将自动与网格中的其他组件大小相同。以上是关于如何在框架和组件之间有间隙?的主要内容,如果未能解决你的问题,请参考以下文章