SWT/JFace入门指南之初步体验widget

从Widget和Control开始

Widget是Control的父类,而Control是我们使用的大多数部件的父类。我们在以前的一些编程语言中可能接触过“控件”或者“组件”之类的概念,部件(widget)的概念大体和这些相当。

在org.eclipse.swt.widgets中定义了众多的widget,甚至我们前面介绍的Shell也被当成widget的一种。

因为可用的widget如此之多,所以我大概没有办法全部一一介绍。在这一节中,我会介绍几种常用的widget。相信善于触类旁通的你通过这些极为简略的介绍应该可以开始使用各种widget,在使用中不断完善自己的认识。

首先我们来介绍Widget。它是一个抽象类,也是所有widget的父类。通过介绍这个类,我们可以得出这所有widget的一些共有特性。

Widget的方法中dispose()方法我们在以前曾经见到过,调用这个方法时候,所谓的接收者(receiver,譬如我们这样写:awidget.dispose(),那么awidget就是接收者,而这句话所处的对象成为调用者或者caller)和接收者中所包含的其他widget会释放它们所占用底层操作系统的资源。这也就是说你不必显式地为程序中创建的每个widget进行dispose()调用,而只需要确保最外层的widget(比如Display)进行了dispose()就可以了。

另外还可以通过isDisposed()判断是否该widget(接收者)已经进行了dispose。

Widget中的getStyle()方法得到widget的风格,而getDisplay()得到所处的Display对象。

此外Widget中还有两个重要方法getData()和setData(),这两个方法允许我们为一个widget附加其他的信息。特别是在你需要跨模块传递widget的时候,这个功能显得非常有用。比如如果一个文本框中显示了一段文章中的某句话,如果我们同时希望把这整篇文章的题目和作者附加上的话可以这样写:

1public class Labels ...{
2
3 public static void main(String[] args) ...{
4 Display display = new Display();
5 Shell shell = new Shell(display,SWT.SHELL_TRIM);
6 RowLayout layout=new RowLayout(SWT.VERTICAL);
7 shell.setLayout(layout);
8 shell.setText("Labels");
9 Label label1=new Label(shell,SWT.CENTER);
10 label1.setText("Label Demo");
11 Label label2=new Label(shell,SWT.SEPARATOR | SWT.HORIZONTAL);
12 shell.setSize(100,100);
13 shell.open();
14
15 while (!shell.isDisposed()) ...{
16 if (!display.readAndDispatch()) ... {
17 display.sleep();
18 }
19 }
20 display.dispose();
21 }
22}
23

时间: 2024-12-16 12:19:53

SWT/JFace入门指南之初步体验widget的相关文章

SWT/JFace入门指南之加速开发

在eclipse中,你可以使用Visual Editor来进行拖放式的图形界面设计.实际上我觉得在这一方面大家应该可以很容易上手. 如果你安装了VE的话,在新建一个swt工程的时候你就可以省好多力气了:你不需要找那些名字n长的jar,然后一个一个导入工程的build path里面,而是仅仅需要添加一个User Library,就像下面图示一样: 开发-swt jface"> 图 7 你可以新建一个Visual Class. 图8 之后就可以使用VE进行可视化的编辑了: 图 9 关于VE的具

SWT/JFace入门指南之让SWT程序动起来

我不知道大家有没有这样的体验:其实软件使用者要求的东西都很基本,而现在软件做得越来越复杂,有相当大一部分是在于软件开发者把自己的注意力放在了一些附加功能(这些功能可能让用户感到惊喜,但是如果没有它们用户也不会不满意)上,而真正用户的要求却得不到满足.所以大家在设计程序的时候,一定要明白,有时候简单就是一种美,把时间花费到真正有价值的地方去. OK,回到我们的主题上来.在这一节中,我将给大家介绍swt的事件模式.在前面我们也提到过,写一个swt程序,无非就是分几步走.其中比较需要费心的就是布置好用

SWT/JFace入门指南之用Layout管理UI布局

我们在前面在一些例子中已经使用过Layout了.那么Layout到底是做什么的呢? 我们知道,在设计用户界面时候,我们可以采用的一种办法是手动的为每个部件设置合适当大小和位置.但是这样的话,如果你所要显示的部件比较多,编程量就会非常大,特别是考虑到窗体大小变化时候各种部件的重绘.而实际上,我们可以利用一些通用的规则或者说算法来安排这些部件的排列.比如下图所示的这个窗体: 图 10 很显然,对于这些规则化的部件排列,应该有一些更简单的办法,而不是在代码的各个部分写xxx.setBounds之类.s

SWT/JFace开发指南之了解Display和Shell

在这一节中,我们从前面所列举出来的Hello, world!程序开始对swt进行一些初步的探索.所谓的初步是指,我们会介绍编写swt程序的基本思路,以及对两个重要的类:Display和Shell作一些介绍. 因为这一节和前一节是分成两个部分贴出来的,所以我仍然将Hello, world!的代码段在下面列出来: 1package swtjfacesample; 2 3import org.eclipse.swt.SWT; 4import org.eclipse.swt.widgets.Displa

SWT/JFace开发入门指南之搭建开发环境

写在前面的话 终于决定提起笔来写一篇关于swt和JFace编程的文章.在开始之前,我想先介绍一下你能够从将要出现的这一系列文章里得到什么,以及更重要的,你不能得到什么.我们的时间是如此之重要,以至于我们很难容忍把它浪费在自己不关心的事情上. 因为我刚开始写,所以到底这些文章会分成几次发布出来,也很难讲.但是我心里大体有这样一个提纲.也就是说,我打算介绍以下方面的内容: ·设定swt以及JFace的开发环境 ·swt的一些简单部件(widget)介绍 ·JFace的一些入门性介绍 ·swt和JFa

SWT(JFace)体验之GridLayout布局_Java编程

GridLayout布局 GridLayout 布局的功能非常强大,也是笔者常用的一种布局方式.GridLayout是网格式布局,它把父组件分成一个表格,默认情况下每个子组件占据一个单元格的空间,每个子组件按添加到父组件的顺序排列在表格中.GridLayout提供了很多的属性,可以灵活设置网格的信息.另外,GridLayout 布局提供了GridData类,子组件可以设置相应的GridData,例如 "dogPhoto.setLayoutData(gridData)",GridData

SWT(JFace)体验之ViewForm的使用_Java编程

代码如下: 复制代码 代码如下: package swt_jface.demo9; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ViewForm; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.s

ajax入门指南(三)

ajax入门指南,相信对ajax初学者会有所帮助. AJAX的主流框架:       浏览器端框架:       一.Prototype系列:         1.Prototype:http://prototype.conio.net,如果在Web应用中实现对Ajax的支持或者需要扩展一些基本的功能,Prototype是个很好的选择:         2.script.aculo.us:http://script.aculo.us,如果要在Web应用中实现更加在丰富的动态效果,提升用户体验,可

MaxCompute(原ODPS)开发入门指南——数据开发工具篇

MaxCompute(原ODPS)开发入门指南--数据开发工具篇 写在最前面 >>>进入了解更多>>>阿里云数加·MaxCompute大数据计算服务. 大家在使用大数据计算服务MaxCompute时,最头疼就是我现在已有的数据如何快速上云?我的日志数据如何采集到MaxCompute上?等等...具体详见<MaxCompute(原ODPS)开发入门指南--数据上云篇>. 但是数据在MaxCompute上了之后,问题又来了,我怎么基于上面进行快速的数据开发,构建