一、简介
SpringLayout,弹性布局管理器。使用该布局的容器内的每一个组件或容器都对应着一个约束,通过该约束定义组件或容器四条边的坐标位置来实现对组件的布局。
SpringLayout布局器是通过定义组件边缘之间的距离来对组件在容器之中组件的布局进行管理而工作的。这样,当一个组件的位置确定后,另一个组件某个边缘的位置可以通过相对于该组件边缘距离来确定,用这种布局管理器的好处是可以在容器大小改变时,各个组件之间的距离不会改变。因为组件有几个不同方向上的边缘,因此对于一个组件来说,要具体确定自己的位置,还要知道自己的哪方向上的边是参照于另一个组件的哪一方向上的边,这样才能准确确定自己的位置。
二、常用方法
// 创建 弹性布局管理器 和 容器,容器 使用 弹性布局
SpringLayout layout = new SpringLayout();
JPanel panel = new JPanel(layout);
public void putConstraint(String e1, Component c1, int pad, String e2, Component c2)
layout.putConstraint(SpringLayout.WEST, label, 5, SpringLayout.WEST, JPane);//标签的左边距离容器的左边5个像素
layout.putConstraint(SpringLayout.NORTH, label, 10, SpringLayout.NORTH, JPane);//标签的北边距离容器的北边10个像素
三、Spring
Spring 可以看做是在 SpringLayout 中对 距离的度量。一个 Spring 实例,表示一段距离或长度,并且支持简单的算术运算(通过 Spring 提供的静态方法进行计算),常用方法如下:
// 创建一个指定长度的 spring
static Spring constant(int pref)
// 两个 spring 相加,得到新的一个 spring
static Spring sum(Spring s1, Spring s2)
// 计算两个 spring 之间的较大者
static Spring max(Spring s1, Spring s2)
// 对 spring 的缩放
static Spring scale(Spring s, float factor)
// 计算指定组件的宽度所表示的 spring
static Spring width(Component c)
// 计算指定组件的高度所表示的 spring
static Spring height(Component c)
// 对 spring 所表示的数值大小的获取和设置
int getValue()
void setValue(int value)
四、举例
import java.awt.*;
import javax.swing.*;
public class TestSpringLayOutM1 extends JFrame{
public static void main(String args[]){
new TestSpringLayOutM1();
}
private static final long serialVersionUID = 1L;
public TestSpringLayOutM1(){
this.setTitle("SpringLayOut测试");
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(600, 400);
addComponents();
this.setVisible(true);
}
private void addComponents(){
Container container = getContentPane();
SpringLayout springLayout = new SpringLayout();
container.setLayout(springLayout);
JButton btn_cal = new JButton("计算");
JLabel lb_ma = new JLabel("加速度:");
JTextField txt_ma = new JTextField(5);
JRadioButton rdb_heli = new JRadioButton("合理");
JRadioButton rdb_buheli = new JRadioButton("不合理");
JRadioButton rdb_all = new JRadioButton("全部");
rdb_all.setSelected(true);
JButton btn_see = new JButton("查看结果");
JTextArea textArea = new JTextArea(3, 30);
textArea.setLineWrap(true);
JScrollPane scrollPane = new JScrollPane(textArea);
JButton btn_export = new JButton("导出到数据库");
Spring st10 = Spring.constant(10);
Spring st20 = Spring.constant(20);
container.add(btn_cal);
springLayout.putConstraint(SpringLayout.NORTH, btn_cal, st10, SpringLayout.NORTH, container);
springLayout.putConstraint(SpringLayout.WEST, btn_cal, st10, SpringLayout.WEST, container);
container.add(lb_ma);
springLayout.putConstraint(SpringLayout.NORTH, lb_ma, st10, SpringLayout.NORTH, container);
springLayout.putConstraint(SpringLayout.WEST, lb_ma, st20, SpringLayout.EAST, btn_cal);
container.add(txt_ma);
springLayout.putConstraint(SpringLayout.NORTH, txt_ma, st10, SpringLayout.NORTH, container);
springLayout.putConstraint(SpringLayout.WEST, txt_ma, st10, SpringLayout.EAST, lb_ma);
container.add(btn_see);
springLayout.putConstraint(SpringLayout.NORTH, btn_see, st10, SpringLayout.NORTH, container);
springLayout.putConstraint(SpringLayout.EAST, btn_see, Spring.constant(-10), SpringLayout.EAST, container);
container.add(rdb_all);
springLayout.putConstraint(SpringLayout.NORTH, rdb_all, st10, SpringLayout.NORTH, container);
springLayout.putConstraint(SpringLayout.EAST, rdb_all, Spring.minus(st10), SpringLayout.WEST, btn_see);
container.add(rdb_heli);
springLayout.putConstraint(SpringLayout.NORTH, rdb_heli, st10, SpringLayout.NORTH, container);
springLayout.putConstraint(SpringLayout.EAST, rdb_heli, Spring.constant(-10), SpringLayout.WEST, rdb_all);
container.add(rdb_buheli);
springLayout.putConstraint(SpringLayout.NORTH, rdb_buheli, st10, SpringLayout.NORTH, container);
springLayout.putConstraint(SpringLayout.EAST, rdb_buheli, Spring.constant(-10), SpringLayout.WEST, rdb_heli);
ButtonGroup group = new ButtonGroup();group.add(rdb_heli);group.add(rdb_buheli);group.add(rdb_all);
container.add(btn_export);
springLayout.putConstraint(SpringLayout.SOUTH, btn_export, Spring.constant(-10), SpringLayout.SOUTH, container);
springLayout.putConstraint(SpringLayout.EAST, btn_export, Spring.minus(st10), SpringLayout.EAST, container);
container.add(scrollPane);
springLayout.putConstraint(SpringLayout.NORTH, scrollPane, st10, SpringLayout.SOUTH, btn_cal);
springLayout.putConstraint(SpringLayout.WEST, scrollPane, st10, SpringLayout.WEST, container);
springLayout.putConstraint(SpringLayout.EAST, scrollPane, Spring.minus(st10), SpringLayout.EAST, container);
springLayout.putConstraint(SpringLayout.SOUTH, scrollPane, Spring.minus(st10), SpringLayout.NORTH, btn_export);
}
}