EmptyBorder 到底有什么作用?

dev*_*er3 5 java swing border flowlayout

我正在尝试理解 java swing 代码。我看到其中有一段使用 EmptyBorder 的代码,但我不明白它在做什么。我尝试评论该部分并在不应用空边框的情况下运行,但它对我来说并没有真正显示出任何区别。或者我只是错过了用户界面的一些微小变化?

代码:

EmptyBorder border1 = new EmptyBorder(3, 0, 6, 550);
.....
JLabel pdt = new JLabel();
pdt.setIcon(icon);
pdt.setText("blah blah");
pdt.setIconTextGap(5);
pdt.setBorder(border1);
....
Run Code Online (Sandbox Code Playgroud)

border1在这里做什么。

我可以使用 EmptyBorder 在 FlowLayout 中的一组控件之间留出间距吗?

小智 5

正如我在评论中提到的,它只是在添加的组件周围添加了一个透明边框,有时效果可能很难看到,具体取决于您使用的布局管理器,因此我将在流布局上包含一些使用它的图片(很容易看到流布局的效果):

这是没有添加边框的流程布局:

流式布局无空边框

这是左边框和右边框分别设置为 100 和 300 的流布局,并将边框应用于第一个标签。 将边框应用于标签的流布局

最后,这里有一些代码供您测试事情如何变化:

import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class EmptyBorderShowCase extends JFrame{

private static final long serialVersionUID = 1L;

public EmptyBorderShowCase(){
    JPanel displayPanel = new JPanel(new FlowLayout());
    final int BOTTOM = 0;
    final int LEFT = 100;
    final int RIGHT = 300;
    final int TOP = 0;
    EmptyBorder border1 = new EmptyBorder(TOP, LEFT, BOTTOM,RIGHT );

    JLabel firstLabel = new JLabel("FIRST");
    firstLabel.setBorder(border1);

    JLabel secondLabel = new JLabel("SECOND");

    displayPanel.add(firstLabel);
    displayPanel.add(secondLabel);
    setContentPane(displayPanel);

    pack();
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
}

public static void main(String[]args){
    new EmptyBorderShowCase();
}

}
Run Code Online (Sandbox Code Playgroud)