这一章有几个问题请教一下老师。
首先,书中的代码在设置布局时所用代码:.putConstraint(NORTH,topicLable,5,NORTH,contentPane)。这个NORTH静态常量无法直接用啊,怎么回事?下图1
二,如书中例24.4中所示,“清空”“确定”两个按钮在设置与容器南侧约束时,是不是只需要设置一个按钮就行了?两个都设置了就变成下图2的样子了。
三,如书中例24.6,利用弹簧控制组件大小这节,拖动也改变不了按钮的宽度啊?(图3,图4)老师能不能帮我看看代码有什么问题?
代码、图 如下:
import java.awt.Container;
import javax.swing.*;
import javax.swing.SpringLayout.Constraints;
public class springlayout extends JFrame{
public springlayout() {
setTitle("弹簧式布局管理器");
setBounds(100, 100, 500, 400);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c = getContentPane();
SpringLayout spl = new SpringLayout();//创建一个弹簧布局对象
c.setLayout(spl);//使容器采用弹簧式布局
Spring vst = Spring.constant(15);//创建一个像素为15的支柱
Spring vst1 = Spring.constant(40);
Spring hsp = Spring.constant(10,30,500);//创建一个最值为10,道选值为30,最大值为500的弹簧
Spring hsp1 = Spring.constant(30,60,200);
JLabel jl = new JLabel("主题:");
c.add(jl);//添加“主题:”标签到容器中
//使组件的北侧距容器的北侧20像素
spl.putConstraint(SpringLayout.NORTH, jl, hsp,SpringLayout.NORTH, c);
//使组件的西侧距容器的西侧20像素
spl.putConstraint(SpringLayout.WEST, jl, 20, SpringLayout.WEST, c);
JTextField jf = new JTextField();
c.add(jf);//添加文本框到容器中
//使文本框的北侧距容器的北侧20像素
spl.putConstraint(SpringLayout.NORTH, jf, hsp, SpringLayout.NORTH, c);
//使文本框的西侧距标签的东部 20像素
spl.putConstraint(SpringLayout.WEST, jf, 20, SpringLayout.EAST, jl);
//使文本框 的东部距容器的东部20像素
spl.putConstraint(SpringLayout.EAST, jf, -20, SpringLayout.EAST, c);
JLabel jl2 = new JLabel("内容:");
c.add(jl2);//添加内容标签到容器中
//在内容标签与主题标签中添加一个支柱vst
spl.putConstraint(SpringLayout.NORTH, jl2, vst, SpringLayout.SOUTH, jl);
//使内容标签西部距容器西部20像素
spl.putConstraint(SpringLayout.WEST, jl2, 20, SpringLayout.WEST, c);
JScrollPane jsp = new JScrollPane();//创建滚动面板
jsp.setViewportView(new JTextArea());//滚动面板中添加文本域
c.add(jsp);//将滚动面板添加到容器中
//在滚动面板与文本框之间添加一个支柱vst
spl.putConstraint(SpringLayout.NORTH, jsp, vst, SpringLayout.SOUTH, jf);
//在滚动面板与内容标签之间添加hsp弹簧1.2倍的距离
spl.putConstraint(SpringLayout.WEST, jsp, Spring.scale(hsp, (float) 1.2), SpringLayout.EAST, jl2);
//使滚动面板东侧距容器东侧20像素
spl.putConstraint(SpringLayout.EAST, jsp, -20, SpringLayout.EAST, c);
JButton jb1 = new JButton("清空");
c.add(jb1);
//在清空按钮南铡与容器南侧之间添加一个支柱,
/*Spring.minus(vst)表示所得弹簧的最小值为指定弹簧最大值的负数,
* 首选值为指定弹簧首选值的负数
* 最大值为指定弹簧最小值 的负数
*/
spl.putConstraint(SpringLayout.SOUTH, jb1,Spring.minus(vst), SpringLayout.SOUTH, c);
spl.putConstraint(SpringLayout.SOUTH, jsp, -20, SpringLayout.NORTH, jb1);
JButton jb2 = new JButton("确定");
c.add(jb2);
spl.putConstraint(SpringLayout.SOUTH, jb2,Spring.minus(vst), SpringLayout.SOUTH, c);
// spl.putConstraint(SpringLayout.SOUTH, jsp, -20, SpringLayout.SOUTH, jb2);
spl.putConstraint(SpringLayout.EAST, jb2, -20, SpringLayout.EAST, c);
spl.putConstraint(SpringLayout.EAST, jb1, -20, SpringLayout.WEST, jb2);
Constraints buttoncon1 = spl.getConstraints(jb1);//获得jb1按钮的Constraints对象
buttoncon1.setHeight(vst1);//设置控制组件的高度为支柱
buttoncon1.setWidth(hsp1);//设置控制组件的宽度为弹簧
Constraints buttoncon2 = spl.getConstraints(jb2);//获得jb2按钮的Constraints对象
buttoncon2.setHeight(vst1);
buttoncon2.setWidth(hsp1);
}
public static void main(String[] args) {
springlayout name = new springlayout();
name.setVisible(true);
}
}