一个EmptyBorder到底是做什么的?

5
我正在尝试理解Java Swing代码。我看到一段代码中使用了EmptyBorder,但我不明白它在做什么。我尝试注释掉那部分并在没有应用EmptyBorder的情况下运行,但对我来说实际上并没有显示出任何差异。或者是我错过了某些细微的UI更改?
代码:
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);
....

这里的border1是做什么用的?
我能否使用EmptyBorder在FlowLayout中为一组控件之间添加间距?

1
你尝试查看了EmptyBorder文档吗? - Dioxin
EmptyBorders就像它的名字一样,是一个没有任何内容的边框,基本上它所做的就是在应用它的组件周围添加一个不可见的边框。 - Chains
我可以使用EmptyBorder在FlowLayout中的一组控件之间提供间距吗?这是什么样的问题?试一下看会发生什么!!! - camickr
1个回答

5
如我在评论中所提到的,它只是在添加到组件周围时添加了一个透明的边框,有时这个效果可能难以看到,这取决于你使用的布局管理器,因此我将包括一些在流布局上使用它的图片(在流布局上很容易看到效果):
以下是未添加边框的流布局: Flow layout no empty border 这是将左和右的边框设置为100和300,并将边框应用于第一个标签的流布局。 flow layout with border applied to a label 最后,这里有一些代码供您测试如何更改事物:
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();
}

}

1
非常感谢。这条信息正是我想要的。 :) - developer3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接