- 浏览: 2443251 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (574)
- Book (62)
- Architecture (6)
- Java (39)
- Taobao (41)
- Distributed (4)
- Life (72)
- Database (7)
- Spring (16)
- Photography (15)
- Bicycle (41)
- Test (20)
- jBPM (8)
- Business (12)
- Movie (3)
- Ajax (15)
- Code (7)
- Eclipse (96)
- VIM (2)
- Music (6)
- Groovy (10)
- AutoHotKey (3)
- Dorado (10)
- Maven (7)
- Scrum (5)
- English (20)
- Financial (12)
- OSGi (3)
- Other (4)
- Tool (6)
- Browser (1)
- PPT (1)
- Project Management (4)
- Agile (6)
- Nosql (1)
- Search engine (6)
- Shell (2)
- Open Source (4)
- Storm (10)
- Guava (3)
- Baby (1)
- netty (1)
- Algorithm (1)
- Linux (1)
- Python (2)
最新评论
-
roy2011a:
https://github.com/ebottabi/sto ...
storm的序列化问题及与spring的结合方式 -
roy2011a:
能抗能打 写道哥们儿,你好!能共享下那个storm与sprin ...
storm的序列化问题及与spring的结合方式 -
Alick1:
兄弟,你之前是不是在深圳的正阳公司呆过啊?
storm的ack和fail -
liuleixwd:
先点个赞,写的非常好!有个问题请教下,如果我再bolt里不用e ...
storm的ack和fail -
yao-dd:
solr的facet查询
以下内容是学习"The Definitive Guide to SWT and JFace"(SWT/JFace权威指南)做的笔记
对于Window编程来说, 我们一般不会涉及到布局这个概念,因为基本上我们都是直接设置控件的大小, 位置等布局信息, 但是对于java来说就不一样了, 它涉及到跨平台的问题, 控件的位置和大小不是由它本身来控制的,因此我们不会看到控件有x, y, width, height等属性,而必须通过外面LayoutData和Layout来控制控件的位置和大小,这个是使用Java进行客户端编程必须转变的一个观念,当然这个也不是绝对,后面我们也会看到不使用布局的做法,但是我们一般不提倡这样做
Layout可以理解为它是控件和其所在容器之间的一层抽象, 它决定了控件在容器中的位置, 而且它是与平台无关的, 它会根据容器大小的变动来调整控件的尺寸.而且容器只能设置一种布局方式, 其包含的控件的布局是不依赖其他容器的
首先要介绍的是FillLayout, 它是所有布局中最简单的一种, 使用了该布局的容器中的所有控件将以同一尺寸放在一行或者一列中, 它有一个type属性,用来指定布局是采用列排列还行排列, type的属性值为SWT.HORIZONTAL和SWT_VERTICAL, 默认情况下是行排列, 因为这个type是一个int常量,如果这个常量既不是水平也不是垂直的话,他们系统将默认是垂直排列
接下来是RowLayout,跟FillLayout比较类似,都是按行或列排列包含在容器中的控件, 唯一不同的就是不会限制所有的控件采用同一大小, 而且如果一行或一列排列不下时会自动换行或者换列, 在使用RowLayout的时候,还会用到RowData类, 容器中的控件将通过它来制定自己的大小, RowLayout将根据每个控件的RowData信息来决定控件在整个容器中放置的位置, RowData可以直接在构造函数中通过width和height参数设置,也可以将width和height包装成Point对象作为其构造参数来设置其大小, RowLayout除了有一个跟FillLayout一样的type属性之外,还有另外几个属性需要介绍一下:
justify属性为true表示位于同一列或者同一行中的控件之间的间距相等;
marginBottom(Left, Right, Top)设置边距;
space指定间距;
wrap指定是否换行;
所有的布局都可以通过GridLayout来实现, 它也是我们用的最多的布局, 它采用表格的形式来放置容器所包含的控件, numColumns是该布局最重要的属性, 他决定了布局的结构, 所有的控件将从左到右被放在容器中, 它还有一些其他的属性:
horizontal(vertical)Spacing指定相邻单元格间距;
makeColumnsEqualWidth 是否强制同宽;
marginHeight(Width, Top, Bottom)设置指定边距;
我们还可以结合给控件指定GridData来进行布局, 但是GridData不能在控件之间公用, 它的一些属性必须说明:
grabExcessHorizontal(Vertical)Space为true的意思是指定控件所在单元格将获取所在行(列)剩余的所有空间, 如果一行(列)有多个控件设定该属性为true则只有第一个设置有效, 注意这里只的是cell并不是控件;
height(width)Hint设置控件的最小高(宽),注意这里指的是控件而不是单元格;
horizontal(vertical)Alignment:这个属性用来设置控件在单元格中的对其方式,有BEGINNING(左对齐),CENTER(居中),END(右对齐),FILL(填满整个单元格)几个值;
horizontal(vertical)Indent:这个是用来水平(垂直)方向上设置控件到单元格之间的间隔;
horizontal(vertical)Span:是用来指定控件在水平(垂直)方向上所占用的单元格;
GridData还有一些常量需要解释一下,BEGINNING,CENTER,END,FILL是用来设置对其方式的,不能作为构造函数的style参数, FILL_BOTH相当于将horizontalAlignment, verticalAlignment设置为FILL加上grabExcessHorizontalSpace和grabExcessVerticalSpace设置为true, 也就是说在构造函数的style参数设置为该值相当于设置了4个属性;FILL_HORIZONTAL = (horizontalAlignment = FILL) + (grabExcessHorizontalSpace=true); FILL_VERTICAL = (verticalAlignment = FILL) + (grabExcessVerticalSpace=true); GRAB_HORIZONTAL = (grabExcessHorizontalSpace =true); GRAB_VERTICAL = (grabExcessVerticalSpace =true), 类似HORIZONTAL_ALIGN_BEGINNING这样的从字面都可以知道意思了
FormLayout是所有布局里面最复杂的一种, 它也使用到自己的LayoutData:FormData, 另外它还会在FormData中通过使用FromAttachment来控制关联控件的位置, FormData可以设置四个FormAttachment实例,分别表示控件的四边与相对控件之间的位置关系, FormAttachment有以下几个成员变量:
alignment 用来指定关联的控件的某个边和相对控件之间的对齐方式, 如果关联的是上下位置,那么可以设置SWT.TOP, SWT.CENTER, SWT.BOTTOM,是左右位置可以设置SWT.LEFT, SWT.CENTER, and SWT.RIGHT, 该属性一般在指定的相对控件不是容器的时候使用, 否则会没有效果;
control属性指的是相对哪个控件,默认情况下是指的关联控件所在的容器;
denominator 是分母默认是100,这个一般不设置;
numerator是分子, 这两个值在control是关联对象的容器的时候才有意义, 用来指定应用的控件到容器关联边在整个容器中的百分比,说白了就是相对位置;
offset是偏移量,说白了就是关联控件与相对控件指定边之间的绝对位置
从FormAttachment的构造函数我们就可以看出来,一般哪些属性是一起设置的, 比如只设置control, 同时设置control和offset, 同时设置control, offset和alignment, 只设置分母, 同时设置分母和分子, 同时设置分母分子和偏移量
StackLayout是一个用的很少的布局, 从字面意思我们可以看出来, 它是将使用该布局的容器内的所有控件位置,大小设置为相同, 然后层叠在一起,只有位于最上面控件可见, 它使用topControl来指定哪个控件位于堆栈最上层并可见, 如果设置为null表示所有控件均不可见, 设置之后并调用容器的layout()方法才能使指定的控件可见
如何自定义布局
通过学习如何自定义布局,可以对SWT的布局实现做深层次的理解
自定义布局需要继承Layout类,并实现compluteSize和layout方法, 关联控件会调用compluteSize方法根据当前控件所包含子控件的大小计算出一个最小的尺寸值,返回值是Point里面的就是高宽值,就是确定要布局的容器的作用范围,而调用layout方法则是为容器中的每一个控件通过调用其setBounds方法来设置位置和大小, 如果需要更多的信息来帮助对控件进行布局,那么可以自己顶一个类来封装这些信息然后通过setLayoutData设置给control.
不使用布局
如果你不要面对垮平台,以及根据布局自动调整容器中的控件,那么也可以不通过布局来确定控件的位置和大小,通过自定义我们知道,布局都是通过调用里面控件的setBounds方法来确定控件的位置的,所以我们要做的就是直接调用控件的setBunds方法而已.
我都是windows下开发的, 这个不清楚
对于Window编程来说, 我们一般不会涉及到布局这个概念,因为基本上我们都是直接设置控件的大小, 位置等布局信息, 但是对于java来说就不一样了, 它涉及到跨平台的问题, 控件的位置和大小不是由它本身来控制的,因此我们不会看到控件有x, y, width, height等属性,而必须通过外面LayoutData和Layout来控制控件的位置和大小,这个是使用Java进行客户端编程必须转变的一个观念,当然这个也不是绝对,后面我们也会看到不使用布局的做法,但是我们一般不提倡这样做
Layout可以理解为它是控件和其所在容器之间的一层抽象, 它决定了控件在容器中的位置, 而且它是与平台无关的, 它会根据容器大小的变动来调整控件的尺寸.而且容器只能设置一种布局方式, 其包含的控件的布局是不依赖其他容器的
首先要介绍的是FillLayout, 它是所有布局中最简单的一种, 使用了该布局的容器中的所有控件将以同一尺寸放在一行或者一列中, 它有一个type属性,用来指定布局是采用列排列还行排列, type的属性值为SWT.HORIZONTAL和SWT_VERTICAL, 默认情况下是行排列, 因为这个type是一个int常量,如果这个常量既不是水平也不是垂直的话,他们系统将默认是垂直排列
接下来是RowLayout,跟FillLayout比较类似,都是按行或列排列包含在容器中的控件, 唯一不同的就是不会限制所有的控件采用同一大小, 而且如果一行或一列排列不下时会自动换行或者换列, 在使用RowLayout的时候,还会用到RowData类, 容器中的控件将通过它来制定自己的大小, RowLayout将根据每个控件的RowData信息来决定控件在整个容器中放置的位置, RowData可以直接在构造函数中通过width和height参数设置,也可以将width和height包装成Point对象作为其构造参数来设置其大小, RowLayout除了有一个跟FillLayout一样的type属性之外,还有另外几个属性需要介绍一下:
justify属性为true表示位于同一列或者同一行中的控件之间的间距相等;
marginBottom(Left, Right, Top)设置边距;
space指定间距;
wrap指定是否换行;
所有的布局都可以通过GridLayout来实现, 它也是我们用的最多的布局, 它采用表格的形式来放置容器所包含的控件, numColumns是该布局最重要的属性, 他决定了布局的结构, 所有的控件将从左到右被放在容器中, 它还有一些其他的属性:
horizontal(vertical)Spacing指定相邻单元格间距;
makeColumnsEqualWidth 是否强制同宽;
marginHeight(Width, Top, Bottom)设置指定边距;
我们还可以结合给控件指定GridData来进行布局, 但是GridData不能在控件之间公用, 它的一些属性必须说明:
grabExcessHorizontal(Vertical)Space为true的意思是指定控件所在单元格将获取所在行(列)剩余的所有空间, 如果一行(列)有多个控件设定该属性为true则只有第一个设置有效, 注意这里只的是cell并不是控件;
height(width)Hint设置控件的最小高(宽),注意这里指的是控件而不是单元格;
horizontal(vertical)Alignment:这个属性用来设置控件在单元格中的对其方式,有BEGINNING(左对齐),CENTER(居中),END(右对齐),FILL(填满整个单元格)几个值;
horizontal(vertical)Indent:这个是用来水平(垂直)方向上设置控件到单元格之间的间隔;
horizontal(vertical)Span:是用来指定控件在水平(垂直)方向上所占用的单元格;
GridData还有一些常量需要解释一下,BEGINNING,CENTER,END,FILL是用来设置对其方式的,不能作为构造函数的style参数, FILL_BOTH相当于将horizontalAlignment, verticalAlignment设置为FILL加上grabExcessHorizontalSpace和grabExcessVerticalSpace设置为true, 也就是说在构造函数的style参数设置为该值相当于设置了4个属性;FILL_HORIZONTAL = (horizontalAlignment = FILL) + (grabExcessHorizontalSpace=true); FILL_VERTICAL = (verticalAlignment = FILL) + (grabExcessVerticalSpace=true); GRAB_HORIZONTAL = (grabExcessHorizontalSpace =true); GRAB_VERTICAL = (grabExcessVerticalSpace =true), 类似HORIZONTAL_ALIGN_BEGINNING这样的从字面都可以知道意思了
FormLayout是所有布局里面最复杂的一种, 它也使用到自己的LayoutData:FormData, 另外它还会在FormData中通过使用FromAttachment来控制关联控件的位置, FormData可以设置四个FormAttachment实例,分别表示控件的四边与相对控件之间的位置关系, FormAttachment有以下几个成员变量:
alignment 用来指定关联的控件的某个边和相对控件之间的对齐方式, 如果关联的是上下位置,那么可以设置SWT.TOP, SWT.CENTER, SWT.BOTTOM,是左右位置可以设置SWT.LEFT, SWT.CENTER, and SWT.RIGHT, 该属性一般在指定的相对控件不是容器的时候使用, 否则会没有效果;
control属性指的是相对哪个控件,默认情况下是指的关联控件所在的容器;
denominator 是分母默认是100,这个一般不设置;
numerator是分子, 这两个值在control是关联对象的容器的时候才有意义, 用来指定应用的控件到容器关联边在整个容器中的百分比,说白了就是相对位置;
offset是偏移量,说白了就是关联控件与相对控件指定边之间的绝对位置
从FormAttachment的构造函数我们就可以看出来,一般哪些属性是一起设置的, 比如只设置control, 同时设置control和offset, 同时设置control, offset和alignment, 只设置分母, 同时设置分母和分子, 同时设置分母分子和偏移量
StackLayout是一个用的很少的布局, 从字面意思我们可以看出来, 它是将使用该布局的容器内的所有控件位置,大小设置为相同, 然后层叠在一起,只有位于最上面控件可见, 它使用topControl来指定哪个控件位于堆栈最上层并可见, 如果设置为null表示所有控件均不可见, 设置之后并调用容器的layout()方法才能使指定的控件可见
如何自定义布局
通过学习如何自定义布局,可以对SWT的布局实现做深层次的理解
自定义布局需要继承Layout类,并实现compluteSize和layout方法, 关联控件会调用compluteSize方法根据当前控件所包含子控件的大小计算出一个最小的尺寸值,返回值是Point里面的就是高宽值,就是确定要布局的容器的作用范围,而调用layout方法则是为容器中的每一个控件通过调用其setBounds方法来设置位置和大小, 如果需要更多的信息来帮助对控件进行布局,那么可以自己顶一个类来封装这些信息然后通过setLayoutData设置给control.
不使用布局
如果你不要面对垮平台,以及根据布局自动调整容器中的控件,那么也可以不通过布局来确定控件的位置和大小,通过自定义我们知道,布局都是通过调用里面控件的setBounds方法来确定控件的位置的,所以我们要做的就是直接调用控件的setBunds方法而已.
评论
4 楼
macrochen
2008-06-12
引用
请问一下老师,如果RCP程序要在unix下运行,请问该如何做?是不是要在unix环境下安装Eclipse?windows下发布的产品配置后能不能在unix下运行?
我都是windows下开发的, 这个不清楚
3 楼
nnnn
2008-06-11
请问一下老师,如果RCP程序要在unix下运行,请问该如何做?是不是要在unix环境下安装Eclipse?windows下发布的产品配置后能不能在unix下运行?
2 楼
sunway
2008-04-16
不错,分析的很正确。。
1 楼
xushiliang
2007-12-24
在理
发表评论
-
Java程序员25个必备的Eclipse插件
2012-01-12 22:36 21865原文:http://www.fromdev.com/2012/ ... -
关于插件更新安装的错误
2007-12-21 20:12 2172在更新插件的时候出现这样的错误: Unable to comp ... -
最近做eclipse branding, features的一些经验
2007-12-16 01:24 4456知道eclipse的splash怎么做 ... -
GEF学习笔记
2007-12-07 20:20 4111GEF以前学习过, 而且还 ... -
Eclipse Action 深入学习笔记(3)
2007-11-25 17:59 4033filter元素是用来指定当 ... -
Eclipse Action 深入学习笔记(2)
2007-11-25 17:14 5137Object Action 这种Action是跟弹出的上下文菜 ... -
Eclipse Action 深入学习笔记(1)
2007-11-25 17:07 7609以前做插件用到的ActionSet都只是依葫芦画瓢,没有真正理 ... -
JFace Text Editor完全掌握之终极指南(4)
2007-11-24 17:08 5613错误标识(Error Marking) Error Marki ... -
JFace Text Editor完全掌握之终极指南(3)
2007-11-24 16:56 5448内容大纲 之所以要给编 ... -
JFace Text Editor完全掌握之终极指南(2)
2007-11-24 16:53 6670最后一步就是实现各种功能 语法高亮 首先我们要实现的是语法高亮 ... -
JFace Text Editor完全掌握之终极指南(1)
2007-11-24 16:17 9920JFace Text Editor是JFace里面一个功能强大 ... -
最近的Eclipse plugin开发总结
2007-11-24 11:30 4885List控件没有提供addDblClickListener方法 ... -
eclipse3.3关于JavaFileEditorInput兼容性问题的解决
2007-11-24 11:22 4628在eclipse3.3中,JavaFileEditor ... -
Eclipse WTP Projects Facets实战指南(2)
2007-11-21 21:13 5191修饰工作 给facet在选择列表中添加图标 格式如下: xml ... -
Eclipse WTP Projects Facets实战指南(1)
2007-11-21 20:21 9532这个文章基本是"Building Project F ... -
也说关于WizardPage的动态生成
2007-11-05 14:26 5117在Eclipse中一个Wizard=Wiza ... -
关于多页编辑器中不同Editor之间的Redo&Undo冲突的解决
2007-09-03 15:17 4025在我们的插件工具的开 ... -
TextEditor原理分析笔记
2007-08-23 15:48 3343Editor的语法着色原理:Eclipse使用damage , ... -
最近的Eclipse开发总结
2007-08-23 15:46 2023java.lang.IllegalAccessError: t ... -
如何判断一个eclipse的版本的代码
2007-08-23 15:41 2895java 代码 String version = ...
相关推荐
swt布局管理,各种布局方式,满足你多元化的需求。
swt布局.doc
swt网页布局介绍Layout csdn有的那个chm文件打不开,里面没有内容 本文件从其他网站下载,能打开。
Eclipse开发经典教程,SWT中采用了布局方式,用户可使用布局来控制组件中元素的位置和大小等信息。
SWT编程开发学习资料和一些实例代码,Eclipse开发经典教程:SWT开发
重要讲解eclipse的开发插件SWT的开发布局,swt是在java平台下一种界面开发插件
应用SWT布局。标签器 数据同步 刷新数据
SWT 案例之学习精华
swt入门学习资料,对于初学者是一套不错的学习资料选择哦。
swt tree学习文档
Agile Grid是基于Eclipse SWT实现的表格控件,基于该控件可实现各种复杂的电子表格。Agile Grid在实现时充分借鉴了Eclipse JFace中TableViewer的设计模式,同时对表格控件的灵活性和可扩展性做了增强设计,开发者可...
这些实例是有关JAVA中SWT编程的实例
SWT配置 SWT配置 SWT配置 SWT配置 SWT配置 SWT配置 SWT配置 SWT配置
对于swt控件知识的部分整理,有助于对其的学习。
关于SWT深入内幕之消息机制探秘,作者深入检出的说明了SWT工作的原理,非常不错,
swt 开发学习
[原创]SWT 深入内幕之消息机制探秘.zip
这是我找到的最全的SWT示例,即使在官方网站上也非常难找,示例包括以下内容:SWT模式窗体,SWT浏览器,SWT树,SWT工具条,SWT画图工具,SWT图形,SWT各种布局,SWT剪贴板,SWT快捷键,SWT菜单,SWT文本编辑器,SWT...
64位windows操作系统使用的SWT库
swtjface api.chm org.eclipse.swt是学习swt/jface帮助文档2