前言:呵呵,第一次翻译别人的东西,不足之处多多指教,不过确实有些地方我也不是很了解那。
by Shantha Ramachandran
Department of Computer Science, Uniersity of Manitoba, Winnipeg, Canada
Overview:
这篇文档我们讲述基本的SWT(Standed Widget Tollkit)的widget(Soso said:也可以说成是控件,窗口小部件,但是我还是愿意称它为widget)。我们会把注意力放到用SWT来开发Java程序上来,而不是通过插件的方式来拓展Eclipse这个平台。如果你还没有准备好通过Eclipse的平台来运行一个基本的SWT程序的话,那么你回头看一下前面关于安装Eclipse以及SWT库的章节。(Soso said:去www.eclipseworld.org看看也可以,我有问题都会去那里翻帖子,还是很有帮助的。)
Widget Structure:
这里说下widget的基本组成。要建立一个使用SWT widgets的程序,你需要在程序开头导入下面这些包:
org.eclipse.swt.*;
org.eclipse.swt.widegts.*;
建立一个SWT widgets程序,你必须创建一个Display和一个Shell对象:
Display display = new Display();
Shell shell = new Shell(display);
display是一个包含了所有GUI组件的对象。display是看不到的,不过添加到里面去的components(组件)却是可见的。一般来讲,一个程序只需要一个display对象。而shell是程序中的窗口。你可以在一个程序里面创建很多的shell,这些shell可以依附在前段(top level)的display(主窗口)或者是依附于其他的shell(子窗口)。就和Swing widget差不过,SWT的widgets的property也是通过类似下面的方式初始化或者是修改。你可以像这样来设置shell的size:
shell.setSize(100, 100);
做完了初始化后,你要做的就是把这个shell打开(调用open方法)然后再执行一个事件的循环。这个事件循环是用来使得shell显示在屏幕上,你可以把这段代码放到初始化shell和widgets后的任何地方。当最外层的shell关闭的时候(可以是调用Shell.Close方法),那么display必须要调用dispose方法来释放资源。













现在你已经可以添加任何widgets到你的shell上面去了,我们先不用layout manager(布局管理器),用布局管理器来创建widgets稍稍有些复杂,接下来的例子先斗不用layout manager,以后我会详细介绍的。
Label:
label是用来显示一些文本的,一般来说,用户不能更改它的内容(当然,程序员是可以的咯)。
用下面的代码放一个label到你的shell上去:
Label label1 = new Label(shell, SWT.BORDER);
label可以用的风格有:BORDER,CENTER, LEFT, RIGHT, WARP以及SEPARATOR。其中separator风格是比较特殊的,它让label显示为一条分隔线。和separator风格可以一起设置的还有HORIZONTAL,VERTICAL,SHADOW_IN,SHADOW_OUT和SHADOW_NONE。
接下来的代码将会创建5个label,其中两个是分隔线。第一个文字label有一个边框(border),第二个是一个普通的label,第三个是一个通过setBackground()方法设置了背景颜色的label。例子中的两个分隔线用了平行的风格,不同的是第一个添加了一个shadow(阴影)的风格。

















下面是显示的图形:
Text:
text的widget包含了一个用户可以修改的文本区域。
以下代码放置一个Text widget到shell上:
Text text1 = new Text(shell, SWT.BORDER);
它支持的风格有:BORDER,H_SCROLL,V_SCROLL,MULTI,SINGLE,READ_ONLY和WRAP。
text widget可以设置一些有意思的属性。如果你的text是可以编辑的,那么你可以设置它的最大输入字符数:
text1.setTextLimit(30);
你也可以通过setEchoChar()方法创建一个密码样式的的text。这个方法的参数是你要代替显示的密码的字符。输入的字符串会被记录在text中,但是从外部看来,你只能看到一串的被你设置成代替显示的字符的队列:
text2.setEchoChar('*');
接下来的代码创建了三个text的widget。第一个有30个输入字符的限制;第二个把所有输入的字符显示成一组星号(*),就像密码区域中显示的一样;最后一个用setEditable()方法设置成只读,设置成只读的另外一个办法是在创建widget的时候,指定SWT.READ_ONLY属性。
你可以试着运行下面的代码,并且在text区域中输入些字符:












下面是这个shell的样子:
Button:
按钮是一个可以被用户点击用来执行某项过程的widget。
以下代码放置一个按钮到shell上:
Button button1 = new Button(shell, SWT.PUSH);
你可以把SWT.PUSH替换成任何SWT支持的按钮风格,它们包括:PUSH,CHECK,RADIO,TOGGLE和ARROW。你还可以用FLAT,BORDER,LEFT,RIGHT和CENTER的其中一种配合。
通过setText()方法来设置按钮显示的文字:
button1.setText("Hello");
要使得按钮可见,你还要设置它的大小以及位置。作为选择,你还可以通过setBounds来同时设定大小和位置:
button1.setLocation(0, 0);
button1.setSize(100, 20);
button1.setBounds(10, 10, 100, 100);
你还可以通过set方法设置它的样式,背景,图象和其他的属性。要给你的按钮添加一个事件处理,你首先要导入events包:
import org.eclipse.swt.events.*;
按钮的基本事件处理是selection event handler。当按钮被选择并按下时,这个selection event handler才被调用。我们添加一个listener给按钮来创建event handler:
button1.addSelectionListener(new SelectionAdapter()) {
public void widgetSelected(SelectionEvent e) {
System.out.println("Button1 was clicked");
}
});
这里有一个很小的例子组合了所有上面出现过的代码。它建立一个按钮,当被按下的时候,console(控制台)中显示“Button1 was clicked”,还有一个箭头按钮和一个带有toggle和flat风格的按钮。

















图例:
先翻译到这里吧,看来还是很简单的,就是格式之类的东西麻烦了点,过段时间再翻译下(有可能就是几个小时后吧^_^)。其实也都是些基础的东西。