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,但是不是很复杂 有了实现表单的打印和更加符合流程表单方式,我们必须自定义布局来适合业务场景打印!我们想要什么效果?看下图 (我们没有布局之前的表单和设置布局 ...
随机推荐
- js基础第3天
仿淘宝搜索框案例(有价值) 判断用户输入事件 正常浏览器:oninput(判断用户输入) ie678浏览器兼容:onpropertychange(因为兼容性问题, ie浏览器678是需要使用这个来判断 ...
- HIbernate学习笔记(八) hibernate缓存机制
hibernate缓存 一. Session级缓存(一级缓存) 一级缓存很短和session的生命周期一致,因此也叫session级缓存或事务级缓存 hibernate一级缓存 那些方法支持一级缓存: ...
- Good practice release jar to Nexus
Step suppose you need to develop a feature,when you finish the feature ,you need to release the jar ...
- 【Hadoop代码笔记】Hadoop作业提交之客户端作业提交
1. 概要描述仅仅描述向Hadoop提交作业的第一步,即调用Jobclient的submitJob方法,向Hadoop提交作业. 2. 详细描述Jobclient使用内置的JobS ...
- 集群搭建必备:虚拟机之一实现Host-only方式上网
Host-only模式实现联网得考虑如下配置过程: 1. 安装VMware-Workstation,安装虚拟机Linux(centos.ubuntu等)完毕: 2.设置虚拟机上网方式是Host-onl ...
- [转载]C++命名规则
在软件开发这一高度抽象而且十分复杂的活动中,命名规则的重要性更显得尤为突出.一套定义良好并且完整的.在整个项目中统一使用的命名规范将大大提升源代码的可读性和软件的可维护性. 在引入细节之前,先说明一下 ...
- linux产生静态库和动态库
如何构建一个库 静态库(.a) 静态库的建立和使用是非常简单的: 1. 编译源文件:gcc -Wall -c test1.c test2.c 2. 生成库文件:ar -cvq libtest.a 3. ...
- Spark的部署方式
1.Spark的应用程序部署 2.Spark的集群部署
- ANT打包J2EE项目war包
1.下载并安装ant 2.安装ant步骤如下 .解压下载的zip包 .进入解压的目录,把bin目录放入系统变量PATH中. eg:E:\dev_tools\apache-ant-\bin .打开cmd ...
- Mysql安装详解
1.MySQL三种安装方式 Rpm包安装 免编译二进制包安装 源码编译安装 1.1.安装环境 Red Hat Enterprise Linux Server release 6.4 2.安装介绍 2. ...