这种方法非常有效,但是如果组件的数量多起来的话,这种方法就显得单调乏味了。相反,另一种回避中间步骤的方法是先不带约束地直接添加组件,然后再分别地添加约束,使用 SpringLayout 的 putConstraint() 方法将约束连接到组件,如清单 3 所示:
清单 3. 用 SpringLayout 添加第二个组件
2 String e2, Component c2)
3 public void putConstraint(String e1, Component c1, Spring s,
4 String e2, Component c2)
5
这里,您无需请求组件的边并自己加进 padding, putConstraint() 方法调用为您同时处理了这两个任务。为了演示这一点,清单 4 像清单 3 那样向正确的组件添加了同样的约束,不过这里使用的是 putConstraint(), 而不是直接使用 SpringLayout.Constraints :
清单 4. 使用 putConstraint() 添加第二个组件
2 Component right = ...;
3 SpringLayout layout = new SpringLayout();
4 JPanel panel = new JPanel(layout);
5 panel.add(left);
6 panel.add(right);
7 layout.putConstraint(SpringLayout.WEST, left, 5,
8 SpringLayout.WEST, panel);
9 layout.putConstraint(SpringLayout.NORTH, left, 25,
10 SpringLayout.NORTH, panel);
11 layout.putConstraint(SpringLayout.NORTH, right, 25,
12 SpringLayout.NORTH, panel);
13 layout.putConstraint(SpringLayout.WEST, right, 20,
14 SpringLayout.EAST, left);
15
putConstraint() 方法中的 String 类型参数是 4 个 SpringLayout 常量 EAST、WEST、NORTH 和 SOUTH。当使用 putConstraint() 时,应首先确信指定了未知组件的位置,并将其连接到某样可以计算的或者固定的东西上,比如屏幕的边界。
用 BeanBuilder 试验 SpringLayout
为了帮助您亲历 SpringLayout 的用法,Sun 提供了一个名为 BeanBuilder 的工具(参阅 参考资料)。当使用 JavaBeans 组件时,该工具还有更多的用处,不过它也为研究 SpringLayout 提供了一种简单的方式。图 1 展示了该工具启动时的样子:
图 1. BeanBuilder 启动屏幕
虽然我们不打算讨论 BeanBuilder 工具的细节,但是关于这个工具有一个地方是要谈到的,那就是使用 SpringLayout 连接组件。在每个组件的各条边上共有 4 个小方框,分别对应 north(北)、south(南)、east(东) 和 west(西)。您可以从一个小方框中拖出一个箭头,将其连接到任何其他的小方框。如果该工具再高级一点,它将允许您指定间隙宽度,但是图 2 显示的是在开发阶段的一个屏幕:
图 2. BeanBuilder 使用屏幕

由图 2 可以说明,您可以可视化地将箭头连接到一个指定的 putConstraint() 调用。