如何巧妙的运用好弹簧布局SpringLayout?

弹簧布局SpringLayout

package Test;
//弹簧布局SpringLayout
//就是先定位好一个组件,其他组件都可以参照已经定位好的组件来定位即可
import javax.swing.*;
import java.awt.*;

public class SpringLayoutTest extends JFrame {

    //设置jpanel的布局管理器为springlayout
    SpringLayout springLayout=new SpringLayout();
    JPanel jPanel=new JPanel(springLayout);

    JLabel titleLable=new JLabel("文章标题:");
    JTextField titleTxt=new JTextField();

    JLabel authorLable =new JLabel("作者:");
    JTextField authorTxt=new JTextField();

    JLabel contLable=new JLabel("请输入内容:");
    JTextArea contArea= new JTextArea(4,10);

    //创建构造函数
    public  SpringLayoutTest(){
        super("弹簧布局springLayout");
        Container contentPane =getContentPane();
        //加入到jpanel中
        titleTxt.setPreferredSize(new Dimension(200,30));

        jPanel.add(titleLable);
        jPanel.add(titleTxt);
        jPanel.add(authorLable);
        authorTxt.setPreferredSize(new Dimension(200,30));
        jPanel.add(authorTxt);
        jPanel.add(contLable);
        jPanel.add(contArea);
        jPanel.setBackground(Color.yellow);

        /*
        SpringLayout:布局管理器
        SpringLayout.Constraints:使用弹簧布局的容器里面的组件的布局约束,每个组件对于一个
        Spring:可以理解为一个可以进行四则运算的整数
         */

        //设置水平居中
        Spring titleLableWidth=Spring.width(titleLable);
        Spring titleTxtWidt=Spring.width(titleTxt);
        Spring spaceWidth=Spring.constant(20);  //其间距为20
        Spring childWidth = Spring.sum(Spring.sum(titleLableWidth,titleTxtWidt),spaceWidth);
        int offsetX=childWidth.getValue()/2;

        SpringLayout.Constraints titleLableC = springLayout.getConstraints(titleLable);
//        titleLableC.setX(Spring.constant(100));
        springLayout.putConstraint(SpringLayout.WEST,titleLable,-offsetX,SpringLayout.HORIZONTAL_CENTER,jPanel);
        titleLableC.setY(Spring.constant(50));
        //这是标题文本框:titleTxt西边距离titleLable的东边20px,北边相同
        SpringLayout.Constraints titleTxtC = springLayout.getConstraints(titleTxt);
        //edgeName:东南西北  s:表示值
        Spring titleLableEastSpring= titleLableC.getConstraint(SpringLayout.EAST);
       titleTxtC.setConstraint(SpringLayout.WEST,Spring.sum(titleLableEastSpring,Spring.constant(20)));
       titleTxtC.setConstraint(SpringLayout.NORTH,titleLableC.getConstraint(SpringLayout.NORTH));

       /*
       设置约束的第二种写法,相对简单
       e1:要设置组件的哪个边界(edgeName)
       c1:要设置的组件
       pad:距离值
       e2:参照的组件的边界名
       c2:参照物(组件)
        *///设置作者Lable  authorLable:东边和titleLable对齐,北边距离titleLable南边20px
       springLayout.putConstraint(SpringLayout.EAST,authorLable,0,SpringLayout.EAST,titleLable);
       springLayout.putConstraint(SpringLayout.NORTH,authorLable,40,SpringLayout.NORTH,titleLable);

       //设置authorTxt:authorTxt西边  距离 authorLable的东边20px,北边和authorLable相同
        springLayout.putConstraint(SpringLayout.WEST,authorTxt,20,SpringLayout.EAST,authorLable);
        springLayout.putConstraint(SpringLayout.NORTH,authorTxt,0,SpringLayout.NORTH,authorLable);

        //内容contLable
        springLayout.putConstraint(SpringLayout.EAST,contLable,0,SpringLayout.EAST,authorLable);
        springLayout.putConstraint(SpringLayout.NORTH,contLable,40,SpringLayout.NORTH,authorLable);

        //contArea
        springLayout.putConstraint(SpringLayout.WEST,contArea,20,SpringLayout.EAST,contLable);
        springLayout.putConstraint(SpringLayout.NORTH,contArea,0,SpringLayout.NORTH,contLable);

        //contArea的南边和东边参照jpanel
        springLayout.putConstraint(SpringLayout.SOUTH,contArea,-20,SpringLayout.SOUTH,jPanel);
        springLayout.putConstraint(SpringLayout.EAST,contArea,-20,SpringLayout.EAST,jPanel);

        contentPane.add(jPanel);

        setSize(600,400); //窗口大小
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //关闭退出程序
        setVisible(true);//窗口可视化

    }
    public static void main(String[] args) {
        new SpringLayoutTest();
    }


}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不易撞的网名

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值