Eclipse开发经典教程之常用SWT组件

来源:互联网 发布:网络商品直销流程 编辑:程序博客网 时间:2024/05/19 06:16

在介绍组件之前,有必要介绍一下Control类。Control类是一个抽象类,它是所有窗口组 件(即在Windows中能获得句柄的部件)的基类。

Control类的继承关系

Control类是为继承而设计的,所有窗口组件都继承于Control类,如图1所示。

图1 Control类的继承关系

Control的一个实例代表Windows中的一个窗口组件,它中有窗口名柄属性,但是在程序中 不能够直接访问。

Control类的常用方法

Control类提供了窗口组件中的常用方法,所有的窗口组件都可以调用Control类的方法, 常用方法如下。

1. setBounds (int x, int y, int width, int height)

解释:设定窗口组件的位置,参数(x,y)为窗口组件左上角顶点的相对于父窗口坐标, (width,height)为窗口的宽度和高度。

示例:button.setBounds(40, 50, 100, 30)。

2. setEnabled (boolean enabled)

解释:设定窗口是否可用,参数enabled为true表示窗口可用,为false表示窗口禁用。

示例:button.setEnabled(false)。

3. setVisible (boolean visible)

解释:设定窗口是否可显示,参数visible为true表示窗口可显示,为false表示窗口不可 显示。

示例:button.setVisible(false)。

4. setToolTipText (String string)

解释:设定鼠标指向窗口时的提示信息,参数string为提示信息的内容。

示例:button.setToolTipText("very good")。

5. setFont (Font font)

解释:设定窗口文字的字体,参数font为字体对象。

示例:button. setFont (font)。

6. setForeground (Color color)

解释:设定窗口的前景色,参数color为颜色对象。

示例:button. setForeground (color)。

7. setBackground (Color color)

解释:设定窗口的背景色,参数color为颜色对象。

示例:button. setBackground (color)。

8. setCursor (Cursor cursor)

解释:设定窗口的光标形状,参数cursor为光标对象。

示例:button.setCursor(new Cursor(null,SWT.CURSOR_WAIT));

9. Control (Composite parent, int style)

解释:窗口组件中的构造函数一般会调用Control类的构造函数,参数parent为当前构建 的窗口的父窗口,style为当前构建窗口的样式(默认可以指定为SWT.NONE)。

示例:Button button = new Button(shell, SWT.NONE)。

另外,Control类还实现了一些和窗口有关的方法,例如createWidget和createHandle等 ,这些方法直接和操作系统相关,有兴趣的读者可以继续研究。

提示:并不是所有的组件调用Control的方法都有用,有些方法是为某些特殊的组件而存 在的。

常用组件

有些组件在大多数操作系统都存在,SWT直接通过JNI直接封装了这些组件。

按钮

Button(按钮)是SWT组件常用的一种。在组件中添加一个按钮很简单,只需要指定按钮的 父组件和相应的样式即可,例如:“Button button = new Button(shell, SWT.PUSH)”语句 在shell组件中添加了一个普通的按钮。

另外,添加一个按钮一般来说会指定按钮的位置(如果未指定布局信息)和按钮的显示标签 ,如例程1所示。

例程1 HelloWorldButton.java

/**
* 为了节省篇幅,所有的import类已经被注释
* 读者可以通过 ctrl+shift+o快捷键,自动引入所依赖的类
* 如果有问题可发邮件到ganshm@gmail.com    * */
public class HelloWorldButton {
public HelloWorldButton() {
Display display = new Display();
Shell shell = new Shell(display);
// 指定父组件和按钮样式
Button button = new Button(shell, SWT.PUSH);
//指定按 钮的位置
button.setBounds(40, 50, 100, 30);
//指定按钮的显示标签
button.setText("Click Me");
shell.setSize(200, 200);
shell.open();
while (!shell.isDisposed()) {
if (! display.readAndDispatch()) {
display.sleep();
}
}
display.dispose ();
}
public static void main(String[] args) {
new HelloWorldButton ();
}
}

上例中展示了如何在一个窗口中添加一个按钮,程序运行效果如图2所示。

图2 按钮组件

按钮的样式有很多种,在SWT中,CheckBox(复选框)和RadioBox(单选框)都是不同样式的 按钮。

提示:如果按钮为复选框或单选框,可以通过“getSelection”方法判断按钮是否被选中 。

标签

Lable(标签)是SWT组件常用的组件之一。在组件中添加一个标签很简单,只需要指定按钮 的父组件和相应的样式即可,例如“Label label = new Label(shell, SWT.SEPARATOR | SWT.VERTICAL)”语句在shell组件中添加了一个标签。

可以为SWT组件指定复合样式,SWT将按复合样式显示组件,如标签示例,例程2所示。

例程2 HelloWorldLabel.java
public class HelloWorldLabel {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
Label label1 = new Label(shell, SWT.WRAP);
label1.setText("very good!");
new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);
new Label(shell, SWT.SEPARATOR | SWT.VERTICAL);
Label label2 = new Label(shell, SWT.NONE);
label2.setText ("very good!");
shell.setSize(200, 70);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep ();
}
display.dispose();
}
}

上例窗口中添加了4个标签,并为每个标签设置了不同的显示样式,程序运行效果如图3所 示。

218x76

图3 标签组件

标签可以作为显示文本的组件,也可以作为分隔符,如果作为分隔符,标签不显示文字信 息。

文本框

Text组件是SWT中的文本框,在组件中添加一个文本框很简单,只需要指定文本框的父组 件和相应的样式即可,例如“Text t = new Text(shell, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL)”语句在shell组件中添加了一个文本框。

文本框有多种显示样式,如例程3所示。

例程3 HelloWorldText.java
public class HelloWorldText {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, false));
// 添加单行文本框
new Text(shell, SWT.BORDER);
// 添加右对齐单行文本框
new Text(shell, SWT.RIGHT | SWT.BORDER);
// 添加以密码形式显示的文本框
new Text(shell, SWT.PASSWORD | SWT.BORDER);
// 添加只读文本框
new Text(shell, SWT.READ_ONLY | SWT.BORDER).setText("Read Only");
// 添加多行显示文 本框
Text t = new Text(shell, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
//给文本属性赋值
t.setText("very long sting test!very long sting test!very long sting test!"
+"very long sting test! ");
t.setLayoutData(new GridData(GridData.FILL_BOTH));
shell.setSize (200,200);
shell.open();
while (!shell.isDisposed()) {
if (! display.readAndDispatch()) {
display.sleep();
}
}
display.dispose ();
}
}

窗口中添加了5个不同样式的文本框,并为每个文本框设置了不同的显示样式,程序运行 效果如图4所示。

图4 文本框组件

不同类型的标签只要指定不同的样式即可,如上所示,文本框有左对齐、右对齐、密码框 、只读文本框和多行显示的文本框。

下拉框

Combo组件是SWT中的下拉列表框,用户可以通过“Combo combo = new Combo(shell, SWT.DROP_DOWN)”在shell组件上添加下拉列表框,另外,可以通过“combo.setItems (ITEMS)”设置下拉列表框的下拉列表,其中“ITEMS”是String的数组。下拉列表框有几种 显示样式,代码如例程4所示。

例程4 HelloWorldCombo.java
public class HelloWorldCombo {
//下拉列表项
private static final String[] ITEMS = { "Alpha", "Bravo", "Charlie", "Delta",
"Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliet", "Kilo", "Lima", "Mike",
"November", "Oscar", "Papa", "Quebec", "Romeo", "Sierra", "Tango", "Uniform",
"Victor", "Whiskey", "X-Ray", "Yankee", "Zulu"
};
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout (new RowLayout());
//添加下拉按钮样式的下拉列表框
Combo combo = new Combo (shell, SWT.DROP_DOWN);
//设置下拉列表项
combo.setItems(ITEMS);
//添加只 读样式的下拉列表框
Combo readOnly = new Combo(shell, SWT.DROP_DOWN | SWT.READ_ONLY);
//设置下拉列表项
readOnly.setItems(ITEMS);
//添加无下拉 按钮样式的下拉列表框
Combo simple = new Combo(shell, SWT.SIMPLE);
//设置下 拉列表项
simple.setItems(ITEMS);
shell.open();
while (!shell.isDisposed ()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}

窗口中添加了3个不同样式的下拉列表框,并且设置了下拉列表框的显示样式,程序运行 效果如图5所示。

图5 下拉列表框组件

上例中只是添加了Combo的显示信息,通常用户会希望所选择的 Item项关联到一个对象,当选择了某一个Item项后,可以直接从此Item项中取得所选的对象 ,然后操作这些对象。用户可以通过Widget 类的“public void setData (String key, Object value)”和“public Object getData (String key)”方法实 现此功能。

Combo是Widget的子类,当初始化Combo时,可以通过setData方法把Item 项的字符串和相应的对象关联起来,当选择此项时再通过getData方法把当前选择项的对象取 出来。Widget类中通过一个对象数组保存用户设置的对象的引用。

提示:Widget是所 有窗口组件的父类,组件如果支持多项数据显示,并可以选择这些数据都可以通过getData和 setData方法获得组件关联的对象。

列表

List组件是SWT中的列表框,用户可 以通过“List single = new List(shell, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL)”在shell组件上添加列表框,还可以通过“setItems(ITEMS) ”设置下拉列表框的下拉列表,其中“ITEMS”是String的数组。列表框有 几种显示样式,代码如例程5所示。

例程5 HelloWorldList.java
public class HelloWorldList {
//列表项
private static final String[] ITEMS = { "Alpha", "Bravo", "Charlie",
"Delta","Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliet", "Kilo",
"Lima", "Mike", "November", "Oscar", "Papa", "Quebec", "Romeo",
"Sierra", "Tango", "Uniform","Victor", "Whiskey", "X-Ray", "Yankee",
"Zulu"
};
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell (display);
shell.setLayout(new FillLayout());
//添加只能单选的列表框
List single = new List(shell, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL);
// 添加列表项
for (int i = 0, n = ITEMS.length; i < n; i++) {
single.add (ITEMS[i]);
}
//选择第5项
single.select(4);
//添加可多选的列表框
List multi = new List(shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
//添 加列表项
multi.setItems(ITEMS);
//选择第10项到第12项
multi.select(9, 11);
shell.open();
while (!shell.isDisposed()) {
if (! display.readAndDispatch()) {
display.sleep();
}
}
display.dispose ();
}
}

上例窗口中添加了两个列表框,一个为单选列表框,一个为多选列表框,程序运行效果如 图6所示。

435x302

图6 列表框组件

提示:选择列表框的多项值,可以是连续或不连续的列表项,如果选择不连续的列表项, 要先按住Shift键再通过鼠标选择。

组件的属性

通过用户创建组件时,应该指定组件的属性,组件的属性包括组件的风格(Style)和对齐 方式等,下面将通过Button组件的属性进行介绍,其它组件的属性也类似。

组件的风格

用户可以通过“org.eclipse.swt.widgets.Button”新建一个SWT的“Button”按钮,新 建按钮可以指定如下不同风格的参数。

·SWT.PUSH:PUSH按钮(普通按钮)。

·SWT.CHECK:复选框按钮。

·SWT.RADIO:单选按钮。

·SWT.TOGGLE:TOGGLE按钮(带状态的普通按钮)。

·SWT.ARROW:箭头按钮。

·SWT.FLAT:扁平按钮。

·SWT.BORDER:带边框按钮。

其中,SWT.FLAT、SWT.BORDER和其他风格可以同时存在。按钮风格显示如表1所示。

461x196

组件的对齐方式

按钮中的文字可以设置对齐方式。SWT中按钮的对齐方式有3种,左对齐、右对齐和居中, 另外,当为箭头按钮时,可以设置箭头向上或向下,如表2所示。

502x160

另外,用户不但可以设置按钮风格、对齐方式和状态,还能通过setImage方法设置按钮的 图片。另外,可以同时组合这些风格、对齐方式和状态,使按钮符合用户的需求,例如风格 “SWT.BORDER|SWT.RADIO”可以设置按钮为带边框的单选按钮。