打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
跟我学之用FormLayout打造自适应窗体大小的控件布局
作SWT程序界面时很多窗体的大小是可变。在大小不固定的窗体里怎么使里面的控件在任意大小下都能保持美观是将让人头疼的事情。FormLayout的布局方式就是解决这一问题的灵丹妙药。上图是王道,看图先:
我胖
我瘦
我标准
以上就是一个窗体在不同大小下的效果,控件随着窗体的大小改变大小和位置,这就是FormLayout的布局方式的的功劳。
FormLayout的布局方式的精髓就两个字“相对”。
下面先看看设计界面:
在设计器里面点击文本框[name_text]可以看到上下左右各出现一个小箭头,这四个箭头就是用来设置该控件在四个方向上的相对位置。
先看看上:
点击上箭头会出现五个小按钮
第一个是设置控件[上边]相对容器[上边],偏移量为具体数字。
第二个是置控件[上边]相对容器[底边],偏移量为具体数字。
第三个是设置控件[上边]相对容器[上边],偏移量为百分比。
第四个是设置控件[上边]相对容器内某控件的位置,偏移量为具体数字。
第五个是取消设置。
左箭头、右箭头和下箭头点击以后与此类似。
举例说明:
对于文本框[name_text],我们这样设置:
[上边]相对容器[上边],偏移量为具体数字。
[左边]相对容器[左边],偏移量为具体数字。
[右边]相对容器[右边],偏移量为具体数字。(当容器改变宽度的时候,控件宽度跟着改变)
[下边]相对容器[上边],偏移量为具体数字。(当容器高度变化时,高度不变)
对于文本框[name_remark],我们这样设置:
[上边]相对容器[上边],偏移量为具体数字。
[左边]相对容器[左边],偏移量为具体数字。
[右边]相对容器[右边],偏移量为具体数字。(当容器改变宽度的时候,控件宽度跟着改变)
[下边]相对容器[下边],偏移量为具体数字。(当容器高度变化时,控件高度跟着改变)
通过A相对B这种方式。我们能制作出非常实用美观的界面。
以下是代码:
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class TestFormLayout {
private Text text_remark;
private Text text_name;
protected Shell shell;
/**
* Launch the application
* @param args
*/
public static void main(String[] args) {
try {
TestFormLayout window = new TestFormLayout();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Open the window
*/
public void open() {
final Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
/**
* Create contents of the window
*/
protected void createContents() {
shell = new Shell();
shell.setLayout(new FillLayout());
shell.setSize(500, 375);
shell.setText("SWT Application");
Label label_remark;
final Composite composite = new Composite(shell, SWT.NONE);
composite.setLayout(new FormLayout());
final Label label_name = new Label(composite, SWT.NONE);
final FormData formData = new FormData();
formData.top = new FormAttachment(0, 25);
formData.left = new FormAttachment(0, 30);
formData.right = new FormAttachment(0, 60);
label_name.setLayoutData(formData);
label_name.setText("姓名");
text_name = new Text(composite, SWT.BORDER);
formData.bottom = new FormAttachment(text_name, 0, SWT.BOTTOM);
final FormData formData_1 = new FormData();
formData_1.top = new FormAttachment(0, 25);
formData_1.right = new FormAttachment(100, -32);
formData_1.bottom = new FormAttachment(0, 43);
formData_1.left = new FormAttachment(label_name, 5, SWT.DEFAULT);
text_name.setLayoutData(formData_1);
text_remark = new Text(composite, SWT.BORDER);
final FormData formData_2 = new FormData();
formData_2.bottom = new FormAttachment(100, -16);
formData_2.right = new FormAttachment(100, -32);
formData_2.top = new FormAttachment(0, 62);
formData_2.left = new FormAttachment(0, 65);
text_remark.setLayoutData(formData_2);
label_remark = new Label(composite, SWT.NONE);
final FormData formData_3 = new FormData();
formData_3.top = new FormAttachment(44, 0);
formData_3.bottom = new FormAttachment(51, 0);
formData_3.right = new FormAttachment(0, 60);
formData_3.left = new FormAttachment(0, 30);
label_remark.setLayoutData(formData_3);
label_remark.setText("说明");
//
}
}
附:
表一:FormAttachment数据成员
Attribute
Description
int alignment
指定是以另外一个部件的哪一边为基准的.可能的值是:SWT.TOP, SWT.CENTER, 和SWT.BOTTOM.默认是以最近的一边为基准.
Control control
指定FormAttachment是以哪个部件为参照物.
int denominator
指定分母.默认值为100
int numerator
指定分子
int offset
指定离composite边界或部件的边界的偏移量.单位是象素.
FormAttachment 拥有5个构造函数,没有一个是空的,它们如下表(表二)所示:
表二:FormAttachment的构造函数:
Constructor
Description
FormAttachment(Control control)
以另外的某个部件为参照物.
FormAttachment(Control control, int offset)
以另外的某个部件为参照物,加上偏移量.
FormAttachment(Control control, int offset, int alignment)
以另外的某个部件为参照物,加上偏移量和alignment
FormAttachment(int numerator)
设定分子.分母为100,没有偏移量
FormAttachment(int numerator, int offset)
指定分子和偏移量和100的分母
FormAttachment(int numerator, int denominator, int offset)
特定的分子,分母,偏移量
FormData最多包含4个FormAttachment实例,每个对应了与它联系的部件的一边.另外,FormData也可以指定宽和高.表四列出了FormData的数据成员:
Attribute
Description
FormAttachment bottom
The FormAttachment corresponding to the bottom side of the control.
这个FormAttachment用来指定部件的底部位置
int height
这个部件的高度.单位为象素.
FormAttachment left
这个FormAttachment用来指定部件的左部位置
FormAttachment right
这个FormAttachment用来指定部件的右部位置
FormAttachment top
这个FormAttachment用来指定部件的顶部位置
int width
这个部件的宽度.单位为象素.
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
理解SWT布局
Understanding Layouts in SWT
SWT 和 JFace, 第 2 部分: 简介
SWT、Swing 或 AWT:哪个更适合您?
SWT Designer 安装与破解
在awt/swing程序中添加swt (Browser控件的使用)【转】 - Picses...
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服