Java Swing SpringLayout弹性布局的实现代码
1.概述
官方JavaDocsApi:
- javax.swing.SpringLayout
- javax.swing.SpringLayout.Constraints
- javax.swing.Spring
SpringLayout,弹性布局管理器。使用该布局的容器内的每一个组件或容器都对应着一个约束,通过该约束定义组件或容器四条边的坐标位置来实现对组件的布局。该布局主要涉及三个类:SpringLayout、SpringLayout.Constraints、Spring,分别表示布局管理器、约束、坐标距离。
(1)SpringLayout
表示一个布局管理器,通过该布局管理器可以获取组件或容器的约束对象,如下:
//创建弹性布局管理器和容器,容器使用弹性布局
SpringLayoutlayout=newSpringLayout();
JPanelpanel=newJPanel(layout);
//创建按钮组件,并添加到容器
JButtonbtn=newJButton("Button");
panel.add(btn);
//获取按钮组件的约束对象(如果没有,会自动创建)
SpringLayout.ConstraintsbtnCons=layout.getConstraints(btn);
//获取容器组件的约束对象(如果没有,会自动创建)
SpringLayout.ConstraintspanelCons=layout.getConstraints(panel);
(2)SpringLayout.Constraints
表示对组件位置和尺寸的约束,每个组件实例都对应着一个约束对象,通过该约束可以获取和设置组件四条边的坐标和宽高,常用方法如下:
/* *组件左上角坐标的设置(这里X相当于WEST,Y相当于NORTH) */ voidsetX(Springx) voidsetY(Springy) SpringgetX() SpringgetY() /* *组件宽高的设置 */ voidsetWidth(Springw) voidsetHeight(Springh) SpringgetHeight() SpringgetWidth() /* *组件指定边的的坐标或长度设置 *edgeName的值为如下常量之一: *SpringLayout.NORTH,SpringLayout.SOUTH,SpringLayout.EAST,SpringLayout.WEST *SpringLayout.HORIZONTAL_CENTER,SpringLayout.VERTICAL_CENTER *SpringLayout.BASELINE *SpringLayout.WIDTH,SpringLayout.HEIGHT */ SpringgetConstraint(StringedgeName) voidsetConstraint(StringedgeName,Springs)
(3)Spring
Spring可以看做是在SpringLayout中对距离的度量。一个Spring实例,表示一段距离或长度,并且支持简单的算术运算(通过Spring提供的静态方法进行计算),常用方法如下:
//创建一个指定长度的spring staticSpringconstant(intpref) //两个spring相加,得到新的一个spring staticSpringsum(Springs1,Springs2) //计算两个spring之间的较大者 staticSpringmax(Springs1,Springs2) //对spring的缩放 staticSpringscale(Springs,floatfactor) //计算指定组件的宽度所表示的spring staticSpringwidth(Componentc) //计算指定组件的高度所表示的spring staticSpringheight(Componentc) //对spring所表示的数值大小的获取和设置 intgetValue() voidsetValue(intvalue)
2.代码实例
packagecom.xiets.swing;
importjavax.swing.*;
publicclassMain{
publicstaticvoidmain(String[]args){
//创建窗口
JFramejf=newJFrame("测试窗口");
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jf.setSize(300,200);
jf.setLocationRelativeTo(null);
//创建内容面板,使用弹性布局
SpringLayoutlayout=newSpringLayout();
JPanelpanel=newJPanel(layout);
jf.setContentPane(panel);
//创建组件
JLabellabel=newJLabel("TestJLabel:");
JButtonbtn=newJButton("Btn");
JTextFieldtextField=newJTextField("TextField");
//添加组件到内容面板
panel.add(label);
panel.add(btn);
panel.add(textField);
/*
*组件的约束设置(弹性布局设置的关键)
*/
//标签组件约束:设置标签的左上角坐标为(5,5)
SpringLayout.ConstraintslabelCons=layout.getConstraints(label);//从布局中获取指定组件的约束对象(如果没有,会自动创建)
labelCons.setX(Spring.constant(5));
labelCons.setY(Spring.constant(5));
//按钮组件约束:设置左上角水平坐标为5,垂直坐标为标签的南边坐标;设置东边坐标为标签的东边坐标
SpringLayout.ConstraintsbtnCons=layout.getConstraints(btn);
btnCons.setX(Spring.constant(5));
btnCons.setY(labelCons.getConstraint(SpringLayout.SOUTH));
btnCons.setConstraint(SpringLayout.EAST,labelCons.getConstraint(SpringLayout.EAST));
//文本框约束:设置左上角水平坐标为标签的东边坐标+5,垂直坐标为5
SpringLayout.ConstraintstextFieldCons=layout.getConstraints(textField);
textFieldCons.setX(
Spring.sum(
labelCons.getConstraint(SpringLayout.EAST),
Spring.constant(5)
)
);
textFieldCons.setY(Spring.constant(5));
/*
*内容面板(容器)的约束设置,即确定组件和容器的右边和底边之间的间隙大小
*/
SpringLayout.ConstraintspanelCons=layout.getConstraints(panel);//获取容器的约束对象
//设置容器的东边坐标为文本框的东边坐标+5
panelCons.setConstraint(
SpringLayout.EAST,
Spring.sum(
textFieldCons.getConstraint(SpringLayout.EAST),
Spring.constant(5)
)
);
//计算出按钮和文本框的南边坐标的值较大者
SpringmaxHeightSpring=Spring.max(
btnCons.getConstraint(SpringLayout.SOUTH),
textFieldCons.getConstraint(SpringLayout.SOUTH)
);
//设置容器的南边坐标为maxHeightSpring+5
panelCons.setConstraint(
SpringLayout.SOUTH,
Spring.sum(
maxHeightSpring,
Spring.constant(5)
)
);
//显示窗口
jf.setVisible(true);
}
}
结果展示:
SpringLayout更详细具体的介绍和使用方式,详见Java官方文档:HowtoUseSpringLayout
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。