我试图了解java swing代码。我在其中看到了一段使用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中的一组控件之间给出间距吗?
答案 0 :(得分:2)
正如我在评论中提到的,它只是在它添加的组件周围添加了一个透明边框,有时效果很难看,这取决于你使用的布局管理器,所以生病包括一些正在使用的图片流程布局(很容易看到对流程布局的影响):
这是没有添加边框的流程布局:
这里是流动布局,边框的左右分别设置为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();
}
}