一、布局管理器
- 弹簧布局管理器以容器和组件的边缘为操作对象,通过组件与容器边缘以及组件与组件边缘建立约束(建立位置关系),实现对组件的布局管理。
- 主要通过函数putConstraint(Strting s1,Component c1,int len,Strting s2,Component c2);当s2在s1的北方或西方时,len为正数,当s2在s1的南方或东方时,len为负数。
参数 | 说明 |
s1 | 需要参考的组件(需要布局的组件)对象的具体需要参考的边 |
c1 | 需要参考的组件(需要布局的组件)对象 |
s2 | 被参考的组件对象的具体需要参考的边 |
c2 | 被参考的组件对象或组件所属的容器对象 |
len | 两条边之间的距离,即两对象的某个边缘的间隔 |
- 弹簧布局方式界面的布局会根据窗口大小的拉伸进行调整,但是组件的相对位置不会改变。
- 通过这种方式,在水平方向或垂直方向上的任意两条边之间都可以建立约束,以实现组件的自适应变化。
- 组件的大小受其文本大小的影响,有时可能或破坏布局,这可以调整文本长度来适应或直接设置组件大小,使布局更美观。
二、用法及效果
- 我们所有的组件都放在窗口容器中,先设置界面的布局方式,以及创建一个容器。
SpringLayout springLayout = new SpringLayout();//使用弹簧布局管理器
Container contentPane = getContentPane(); //创建一个容器
contentPane.setLayout(springLayout); //设置布局方式
- "随机生成"按钮的放置:按钮的北部与容器的北部距离x,以及按钮的西部以容器的西部距离y,则设置如下,这种设置按钮的调整受两条边约束
JButton c1= new JButton("随机生成");//按钮定义及其布局位置设置
//位置约束,c1,contentPane分别为按钮对象和容器对象
springLayout.putConstraint(SpringLayout.NORTH, c1, x, SpringLayout.SOUTH, contentPane);
springLayout.putConstraint(SpringLayout.WEST, c1, y, SpringLayout.WEST, contentPane);
- "同时开始"按钮的放置:按钮的北部与文字标签的南部距离x,以及按钮的东部以容器的东部距离y(容器在按钮的东部,所以代码中需要设置距离为负数),则设置如下,这种设置,按钮的调整受两条边约束,当窗口大小改变时,按钮位置发生改变,当是其相对位置不变。
//按钮定义及其布局位置设置
JButton c1 = new JButton("同时开始");
//lab为JLabel lab = new JLabel("请单击按钮生成20000个0~100000的整数.")对象
springLayout.putConstraint(SpringLayout.NORTH, c1, x, SpringLayout.SOUTH, lab);
springLayout.putConstraint(SpringLayout.EAST, c1, -y, SpringLayout.EAST, contentPane);
- 对于中间的文本框,需要设置三个方向的约束:
//需要布局的编辑框edit,e为其北部编辑框,距离x,t为其西部文本标签,距离y,c为容器,距离z
springLayout.putConstraint(SpringLayout.NORTH, edit, x, SpringLayout.SOUTH, e);
springLayout.putConstraint(SpringLayout.WEST, edit, y, SpringLayout.EAST, t);
springLayout.putConstraint(SpringLayout.EAST, edit, -z, SpringLayout.EAST,c);
三、按钮事件绑定
SpringLayout springLayout = new SpringLayout();
Container contentPane = getContentPane();
contentPane.setLayout(springLayout);
//按钮定义及其布局位置设置
JButton start= new JButton("随机生成");
contentPane.add(start);
springLayout.putConstraint(SpringLayout.NORTH, start, 10, SpringLayout.NORTH, contentPane);
springLayout.putConstraint(SpringLayout.WEST, start, 10, SpringLayout.WEST, contentPane);
//为按钮绑定响应事件
start.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
for (int i = 0; i < 20000; i++)
{
Array[i] = (int) (Math.random() * 100000);
}
lab.setText("成功生成20000个0~100000的整数.");
}
});