SWT中的布局之-----FormLayout(表格式布局)
表格式(FormLayout类) 表格式布局管理器,通过创建组件各个边的距离来布局组件,和GridLayout一样强大.
用GridLayout与FormLayout都可以实现相同的界面效果,但有时使用后者会更有效,而且不会像GridLayout因为容器大小变化而导致布局错位.
使用marignWidth,marginHeight设置边距(这两个属性,来设置容器的左边距和上边距(单位:像素))
使用FormData的构造函数(FormLayout也有自己的布局数据类,他的使用方法是new FormData()或new FormData(int width,int height))
FormAttachment类的用法
FormAttachment是在FormData下的,更进一步的布局数据类,它的用法主要体现在它不同的构造函数中.
FormLayout1.java
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell; public class FormLayout1 {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
// ---------创建窗口中的其他界面组件-------------
FormLayout formLayout = new FormLayout();
formLayout.marginWidth = 100; // 左边距,单位:像素
formLayout.marginHeight = 50; // 上边距
shell.setLayout(formLayout);
new Button(shell, SWT.NONE).setText("button1");
// -----------------END------------------------
shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}

1.使用marginWidth,marginHeight设置边距
这两个属性用来设置容器的左边距和上边距(单位:像素).下面给出一个具体的实例:
public class FormLayout1 {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
shell.setText("SWT Application");
// ------------------新插入的界面核心代码------------------------
FormLayout formLayout = new FormLayout();
formLayout.marginWidth = 100;
formLayout.marginHeight = 50;
shell.setLayout(formLayout);
new Button(shell, SWT.NONE).setText("button1");
// ------------------END---------------------------------------------
shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
}

2.使用FormData的构造函数
FromLayout也有自己的布局数据类FormData,它的使用方法是:new FormData()或者new FormData(int width,int height)
public class FormData1 {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
shell.setText("SWT Application");
// ------------------新插入的界面核心代码------------------------
shell.setLayout(new FormLayout());
// new FormData ()
Button button1 = new Button(shell, SWT.NONE);
button1.setText("button1");
FormData formData = new FormData();
button1.setLayoutData(formData);
// new FormData (int width, int height),单位:像素
Button button2 = new Button(shell, SWT.NONE);
button2.setText("button2");
FormData formData2 = new FormData(200, 50);// button2变成200长,50宽
button2.setLayoutData(formData2);
// ------------------END---------------------------------------------
shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
}

3.FormAttachment类的用法:
FromAttachment是在FormData下的,更进一步的布局数据类.它的用法体现在他不同的构造函数中.
(1) new FormAttachment(int numerator,int offset)
button1的顶边(fromData.top)离shell容器的空白边距是shell容器总体空白长度的60%.
偏移的点数(points)为0,效果如下:
//>>>>>>>>>>>>>>>华丽丽的分割线>>>>>>>>>>>>>>>>>>>>>>>>>>>>
shell.setLayout(new FormLayout());
new Text(shell, SWT.BORDER).setText("text1");
//将button1应用FormData
Button button1 = new Button(shell, SWT.NONE);
button1.setText("button1"); FormData formData = new FormData();
formData.top = new FormAttachment(60, 0); // button1的顶端应用FormAttachment设置
button1.setLayoutData(formData); //>>>>>>>>>>>>>>>华丽丽的分割线>>>>>>>>>>>>>>>>>>>>>>>>>>>>

如果改成了 formData.top = new FormAttachment(60, 30)

从图中更以看出FormAttachment(60,30)是先按照FormAttachment(60,0)
的方式布局后,再下移动10个像素.这个地方有一个布局的次序.
new FormAttachment(int numerator)相当于new FormAttachment(int numerator,int offset)
当offset=0时,new FormAttachment(int numerator,int offset)相当于FormAttachmetn(int numerator,int denominator,int offset)当denominator(分母的意思)=100时,其中denominator是分母,例如FormAttachment(30,50,0)就是长度比例为30/50=60%,也就是和FormAttachment(60,0)的效果是一样的.
(2) new FormAttachment(Control control,int offset,int alignment)
参数1是一个Control类,一般在使用的时候,都传入一个组件(如文本框来做参数),应用此FormAttachment的组件将
依据参数1的contorl为基准来布局,offset为离control偏移量(单位:像素),alignment为对齐方式.
下面给出一个例子:
//======================华丽丽的分割线===========================
shell.setLayout(new FormLayout());
Text text1 = new Text(shell, SWT.BORDER);
text1.setLayoutData(new FormData(100, 50));
//定义并设置FormData
FormData formData = new FormData();
//以text1为基准偏移50像素
FormAttachment formAttachment = new FormAttachment(text1,50);
formData.top = formAttachment;
formData.left = formAttachment;
// 将button1应用FormData
Button button1 = new Button(shell, SWT.NONE);
button1.setText("button1");
button1.setLayoutData(formData);
//======================华丽丽的分割线===========================

new FormAttachment(text1,50,int alignment)中alignment的设置的效果如图所示,
表中的效果的程序就是按照上面的代码为基础修改"FormAttachment formAttachment = new FormAttachment(text1,50);"
这一句得到的.

FormAttachment1.java
public class FormAttachment1 {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
// ---------创建窗口中的其他界面组件-------------
shell.setLayout(new FormLayout());
Button button = new Button(shell, SWT.NONE);
button.setText("button");
FormData formData = new FormData();
// 按钮的顶端(formData.top)离shell容器的空白边距是shell容器总体空白长度的60%
formData.top = new FormAttachment(60, 0);
button.setLayoutData(formData);
// -----------------END------------------------
shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}

FormAttachment2.java
public class FormAttachment2 {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
// ---------创建窗口中的其他界面组件-------------
shell.setLayout(new FormLayout());
Text text1 = new Text(shell, SWT.BORDER);
text1.setLayoutData(new FormData(100, 50));
// 定义并设置FormData
FormData formData = new FormData();
// 以text1为基准偏移50像素
FormAttachment formAttachment = new FormAttachment(text1, 50);
// FormAttachment formAttachment = new FormAttachment(text1, 50,
// SWT.LEFT);参数3的可选值包括SWT.DEFAULT、SWT.LEFT、SWT.CENTER、SWT.RIGHT、SWT.TOP、SWT.BOTTOM
formData.top = formAttachment;
formData.left = formAttachment;
// 将button1应用FormData
Button button1 = new Button(shell, SWT.NONE);
button1.setText("button1");
button1.setLayoutData(formData);
// -----------------END------------------------
shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}

SWT中的布局之-----FormLayout(表格式布局)的更多相关文章
- 关于SWT中的布局Layout
组件装在容器里,那么这些组件是如何布局的呢?在这之前所有的例子都是使用setBounds来 进行绝对坐标的定位的. 在实际应用过程中大都是采用布局管理器的方式来布局容器中的组件. 布局管理器定义了组件 ...
- SWT中各种参数大全
1按钮组件(Button) (1)Button组件常用样式 SWT.PUSH按钮 SWT.CHECK多选按钮 SWT.RADIO单选按钮 SWT.ARROW箭头按钮 SWT.NONE默认按钮 SWT. ...
- [WPF自定义控件库]简单的表单布局控件
1. WPF布局一个表单 <Grid Width="400" HorizontalAlignment="Center" VerticalAlignment ...
- 关于SWT中的GridLayout布局方式
GridLayout 布局的功能非常强大,也是笔者常用的一种布局方式.GridLayout是网格式布局,它把父组件分成一个表格,默认情况下每个子组件占据一个单元格的空间,每个子组件按添加到父组件的顺序 ...
- CSS样式表与格式布局
样式表 CSS(Cascading Style Sheets 层叠样式表),作用是美化HTML网页. 内联样式表: 例:<p style="font-size:10px;" ...
- DataTable to Excel(使用NPOI、EPPlus将数据表中的数据读取到excel格式内存中)
/// <summary> /// DataTable to Excel(将数据表中的数据读取到excel格式内存中) /// </summary> /// <param ...
- Oracle中使用游标转换数据表中指定字段内容格式(拼音转数字)
应用场景:将数据表TB_USER中字段NNDP的内容中为[sannanyinv]转换为[3男1女] 主要脚本:一个游标脚本+分割字符串函数+拼音转数字脚本 操作步骤如下: 1.创建类型 create ...
- Excel-同个工作簿中,多个工作表中有格式一致的表格,做汇总透视合并信息
12.同个工作簿中,多个工作表中有格式一致的表格,做汇总透视合并信息 在工作簿中新建一个工作表-汇总表->按Alt+D+P调出数据透视表和数据透视图向导->选择"多重合并计算数据 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(55)-工作流设计-表单布局
系列目录 前言:这一节比较有趣.基本纯UI,但是不是很复杂 有了实现表单的打印和更加符合流程表单方式,我们必须自定义布局来适合业务场景打印!我们想要什么效果?看下图 (我们没有布局之前的表单和设置布局 ...
随机推荐
- 【DOM】学习笔记
三. 一份文档就是一颗节点树 节点类型:元素节点——属性节点.文本节点 getElementById()返回一个对象,对应一个元素节点 getElementByTagName()返回一个对象数组,分别 ...
- Codeforces Round #355 (Div. 2)
A 弯腰 #include<cstdio> #include<cstring> #include<iostream> #include<queue> # ...
- 【转载】socket的半包,粘包与分包的问题
http://zhaohuiopensource.iteye.com/blog/1541270 首先看两个概念: 短连接: 连接->传输数据->关闭连接 HTTP是无状态的,浏览器和 ...
- 题解西电OJ (Problem 1003 -最喜欢的数字)--动态规划
Description zyf最喜欢的数字是1!所以他经常会使用一些手段,把一些非1的数字变 成1,并为此得意不已.他会且仅会的两种手段是: 1.把某个数m除以某个质数p——当然p必须能整除这个数,即 ...
- 安装禅道项目管理软件ZenTaoPMS
服务器Ubuntu 13.04 且安装了上一篇随笔中的 AMP本文略去安装AMP过程.版本号满足要求(php>5.2 and mysql.2) 1.官网http://www.zentao.net ...
- A Tour of Go Switch
You probably knew what switch was going to look like. A case body breaks automatically, unless it en ...
- 安森美电量计采用内部电阻跟踪电流--电压HG-CVR
http://www.dianyuan.com/article/34608.html LC709203F应用:用于便携式设备单节锂电池的智能电量计http://files.cnblogs.com/fi ...
- JQuery.Ajax之错误调试帮助信息介绍
下面是Jquery中AJAX参数详细列表: timeout Number 设置请求超时时间(毫秒).此设置将覆盖全局设置. async Boolean (默认: true) 默认设置下,所有请求均为异 ...
- js url传值中文乱码之解决之道
在websphere 中使用的是url=encodeURI(encodeURI(url)); //用了2次encodeURI 测试成功,第一次转换没有尝试, 处理方法一. js 程序代码:url=en ...
- 在LiteIDE 中增加build 的参数
问题: go build 时候其实可以带参数的,但是我们直接运行liteIDE 就找不到 特别对于 Walk 这个gui 需要 -ldflags="-H windowsgui" 把 ...