Java布局管理器组件(6)

计算最高组件的最大高度,尝试把所有的组件都增加到这个高度,如果有某些组件不能达到此高度,那么要在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(); } }

以上代码运行结果为:

BoxLayout代码运行结果

SpringLayout

SpringLayout布局管理器是通过定义组件的边沿距离来实现布局的。边界之间的距离是使用Spring对象来表示的。每一个Spring对象具有4个属性值,包括minimum、maximum、preferred、value,其中value表示的是真实的值。
在在这个管理器中,涉及到如下几个常量:

EAST:指定组件的边界矩形的右边。

NORTH:指定组件的边界矩形的顶边。

SOUTH:指定组件的边界矩形的底边。

WEST:指定组件的边界矩形的左边。
在布局的时候,经常会用到下面的方法:
void putConstraint(Stirng e1,int pad,String e2,Component c2);
下面针对该布局管理器用代码来实际看看:

import javax.swing.*; /** * SpringLayout * Created by veione on 5/9/16. */ public class SpringLayoutDemo { private static final int WIDTH=300; private static final int HEIGHT=200; public static void main(String[] args) { JFrame frame=new JFrame("SpringLayout"); frame.setVisible(true); frame.setSize(WIDTH,HEIGHT); Tools.centerWindow(frame); JPanel contentPane=new JPanel(); frame.setContentPane(contentPane); JButton btnLoad=new JButton("加载"); JButton btnTest=new JButton("测试"); JLabel label=new JLabel("测试程序"); contentPane.add(label); contentPane.add(btnLoad); contentPane.add(btnTest); //创建一个SpringLayout布局管理器,并且将之作为中间容器的布局方式 SpringLayout springLayout=new SpringLayout(); contentPane.setLayout(springLayout); //针对每个组件设置其与边界的距离 springLayout.putConstraint(SpringLayout.NORTH,label,5,SpringLayout.NORTH,contentPane); springLayout.putConstraint(SpringLayout.WEST,label,85,SpringLayout.WEST,contentPane); springLayout.putConstraint(SpringLayout.EAST,label,5,SpringLayout.EAST,contentPane); springLayout.putConstraint(SpringLayout.NORTH,btnLoad,55,SpringLayout.NORTH,contentPane); springLayout.putConstraint(SpringLayout.WEST,btnLoad,5,SpringLayout.WEST,contentPane); springLayout.putConstraint(SpringLayout.EAST,btnLoad,25,SpringLayout.EAST,contentPane); springLayout.putConstraint(SpringLayout.NORTH,btnTest,105,SpringLayout.NORTH,contentPane); springLayout.putConstraint(SpringLayout.WEST,btnTest,5,SpringLayout.WEST,contentPane); springLayout.putConstraint(SpringLayout.EAST,btnTest,25,SpringLayout.EAST,contentPane); frame.setVisible(true); } }

运行结果如下:

SpringLayout

GroupLayout

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/29309af9c4ff3a48525f10b652d17df8.html