计算最高组件的最大高度,尝试把所有的组件都增加到这个高度,如果有某些组件不能达到此高度,那么要在Y轴上对齐需要通过getAlignmentY方法实现,该方法返回一个介于0(按顶部对齐)和1(按底部对器)之间的浮点数。组件的默认值是0.5,也就是中线对齐。
得到每个组件的首选宽度,然后把所有的首选宽度合计起来。
如果首选宽度总和小于箱的宽度,那么所有的组件都会相应的延伸,直到适应这个箱子的宽度。组件从左到右排列,并且相邻两个组件之间没有多余的空格。
箱式布局组件之间没有空隙,那么就要通过一个称为填充物的组件来提供空隙。箱式布局管理器提供了3种填充物:支柱、固定区、弹簧。下面将通过代码来说明给布局管理器:
import javax.swing.*; import java.awt.*; /** * BoxLayout * Created by veione on 5/9/16. */ public class BoxLayoutCase extends JFrame{ private static final int WIDTH=300; private static final int HEIGHT=200; public BoxLayoutCase(){ setTitle("BoxLayout"); setSize(WIDTH,HEIGHT); Container con=getContentPane(); JLabel label=new JLabel("姓名:"); JTextField txtField=new JTextField(10); txtField.setMaximumSize(txtField.getPreferredSize()); //创建一个水平箱子 Box horBox=Box.createHorizontalBox(); horBox.add(label); //在水平箱子上添加一个标签组件,并且创建一个不可见的20个单位的组件 //在这之后再添加一个文本框组件 horBox.add(Box.createHorizontalStrut(20)); horBox.add(txtField); JLabel labelPwd=new JLabel("密码:"); JPasswordField txtPwd=new JPasswordField(10); txtPwd.setMaximumSize(txtPwd.getPreferredSize()); //创建一个水平箱子 Box pwdHorBox=Box.createHorizontalBox(); pwdHorBox.add(labelPwd); pwdHorBox.add(Box.createHorizontalStrut(20)); pwdHorBox.add(txtPwd); JButton btnOk=new JButton("确定"); JButton btnCancel=new JButton("取消"); //创建一个水平箱子 Box btnHorBox=Box.createHorizontalBox(); btnHorBox.add(btnOk); btnHorBox.add(Box.createHorizontalStrut(20)); btnHorBox.add(btnCancel); //创建一个垂直箱子将水平箱子放入到垂直箱子种 Box vBox=Box.createVerticalBox(); vBox.add(horBox);; vBox.add(pwdHorBox); vBox.add(btnHorBox); con.add(vBox,BorderLayout.CENTER); Tools.centerWindow(this); setVisible(true); } public static void main(String[] args) { new BoxLayoutCase(); } }以上代码运行结果为:
SpringLayout布局管理器是通过定义组件的边沿距离来实现布局的。边界之间的距离是使用Spring对象来表示的。每一个Spring对象具有4个属性值,包括minimum、maximum、preferred、value,其中value表示的是真实的值。
在在这个管理器中,涉及到如下几个常量:
EAST:指定组件的边界矩形的右边。
NORTH:指定组件的边界矩形的顶边。
SOUTH:指定组件的边界矩形的底边。
WEST:指定组件的边界矩形的左边。
在布局的时候,经常会用到下面的方法:
void putConstraint(Stirng e1,int pad,String e2,Component c2);
下面针对该布局管理器用代码来实际看看:
运行结果如下: