已有101人关注
弹簧式布局管理器
发表在Java图书答疑 2019-03-29 《Java从入门到精通(第4版)》第24章 高级布局管理器
是否精华
版块置顶:

这一章有几个问题请教一下老师。

首先,书中的代码在设置布局时所用代码:.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);

}

}


分享到:
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照