一、布局管理器

  • 弹簧布局管理器以容器和组件的边缘为操作对象,通过组件与容器边缘以及组件与组件边缘建立约束(建立位置关系),实现对组件的布局管理。
  • 主要通过函数putConstraint(Strting s1,Component c1,int len,Strting s2,Component c2);当s2在s1的北方或西方时,len为正数,当s2在s1的南方或东方时,len为负数。

参数

说明

s1

需要参考的组件(需要布局的组件)对象的具体需要参考的边

c1

需要参考的组件(需要布局的组件)对象

s2

被参考的组件对象的具体需要参考的边

c2

被参考的组件对象或组件所属的容器对象

len

两条边之间的距离,即两对象的某个边缘的间隔

  • 弹簧布局方式界面的布局会根据窗口大小的拉伸进行调整,但是组件的相对位置不会改变。
  • 通过这种方式,在水平方向或垂直方向上的任意两条边之间都可以建立约束,以实现组件的自适应变化。
  • 组件的大小受其文本大小的影响,有时可能或破坏布局,这可以调整文本长度来适应或直接设置组件大小,使布局更美观。

 

二、用法及效果

                                                 

JAVA自适应网站源码 java自适应布局_布局管理器

  • 我们所有的组件都放在窗口容器中,先设置界面的布局方式,以及创建一个容器。
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的整数.");
     }
});