【问题标题】: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 很陌生,所以我不太了解其他技巧。我将不胜感激任何帮助!谢谢!

【问题讨论】:

    标签: java swing awt jlabel layout-manager


    【解决方案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,因此无法控制空白空间的大小,因为它将自动与网格中的其他组件大小相同。
        猜你喜欢
        • 2020-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-26
        • 2020-06-12
        • 1970-01-01
        • 2021-07-16
        • 1970-01-01
        相关资源
        最近更新 更多