从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