现在的位置: 首页 > 综合 > 正文

Basic SWT Widegts 1st

2012年03月05日 ⁄ 综合 ⁄ 共 4790字 ⁄ 字号 评论关闭

前言:呵呵,第一次翻译别人的东西,不足之处多多指教,不过确实有些地方我也不是很了解那。 

Basic SWT Widegt                                

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方法来释放资源。

shell.open();

while (!shell.isDisposed()) {

        
if (!display.readAndDispath())

                display.sleep();

        }


display.dispose();

现在你已经可以添加任何widgets到你的shell上面去了,我们先不用layout manager(布局管理器),用布局管理器来创建widgets稍稍有些复杂,接下来的例子先斗不用layout manager,以后我会详细介绍的。

Label:

label是用来显示一些文本的,一般来说,用户不能更改它的内容(当然,程序员是可以的咯)。

用下面的代码放一个label到你的shell上去:

Label label1 = new Label(shell, SWT.BORDER);

label可以用的风格有:BORDERCENTERLEFTRIGHT, WARP以及SEPARATOR。其中separator风格是比较特殊的,它让label显示为一条分隔线。和separator风格可以一起设置的还有HORIZONTALVERTICALSHADOW_INSHADOW_OUTSHADOW_NONE

接下来的代码将会创建5个label,其中两个是分隔线。第一个文字label有一个边框(border),第二个是一个普通的label,第三个是一个通过setBackground()方法设置了背景颜色的label。例子中的两个分隔线用了平行的风格,不同的是第一个添加了一个shadow(阴影)的风格。

Label label1 = new Label(shell, SWT.BORDER);
label1.setText(
"See no evil");
label1.setSize(
100,20);
label1.setLocation(
30,30);
Label sep1 
= new Label(shell, SWT.SEPARATOR| SWT.HORIZONTAL | SWT.SHADOW_IN);
sep1.setBounds(
30,60,100,20);
Label label2 
= new Label(shell, SWT.NONE);
label2.setText(
"Hear no evil");
label2.setSize(
100,20);
label2.setLocation(
30,90);
Label sep2 
= new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);
sep2.setBounds(
30,120,100,20);
Label label3 
= new Label(shell, SWT.NONE);
label3.setSize(
100,20);
label3.setLocation(
30,150);
label3.setBackground(
new Color(display,200,111,50));
label3.setText(
"Speak no evil");

下面是显示的图形:

Text:

text的widget包含了一个用户可以修改的文本区域。

以下代码放置一个Text widget到shell上:

Text text1 = new Text(shell, SWT.BORDER);

它支持的风格有:BORDERH_SCROLLV_SCROLLMULTISINGLEREAD_ONLYWRAP

text widget可以设置一些有意思的属性。如果你的text是可以编辑的,那么你可以设置它的最大输入字符数:

text1.setTextLimit(30);

你也可以通过setEchoChar()方法创建一个密码样式的的text。这个方法的参数是你要代替显示的密码的字符。输入的字符串会被记录在text中,但是从外部看来,你只能看到一串的被你设置成代替显示的字符的队列:

text2.setEchoChar('*');

接下来的代码创建了三个text的widget。第一个有30个输入字符的限制;第二个把所有输入的字符显示成一组星号(*),就像密码区域中显示的一样;最后一个用setEditable()方法设置成只读,设置成只读的另外一个办法是在创建widget的时候,指定SWT.READ_ONLY属性。

你可以试着运行下面的代码,并且在text区域中输入些字符:

Text text1 = new Text(shell, SWT.BORDER);
text1.setText(
"Type something in here");
text1.setBounds(
10,10,200,20);
text1.setTextLimit(
30);
Text text2 
= new Text(shell, SWT.NONE);
text2.setEchoChar(
'*');
text2.setBounds(
10,50,200,20);
text2.setText(
"Password");
Text text3 
= new Text(shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
text3.setBounds(
10,90,200,100);
text3.setEditable(
false);
text3.setText(
"Bet you can't type in here");

下面是这个shell的样子:

Button:

按钮是一个可以被用户点击用来执行某项过程的widget。

以下代码放置一个按钮到shell上:

Button button1 = new Button(shell, SWT.PUSH);

你可以把SWT.PUSH替换成任何SWT支持的按钮风格,它们包括:PUSHCHECKRADIOTOGGLEARROW。你还可以用FLATBORDERLEFTRIGHTCENTER的其中一种配合。

通过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风格的按钮。

Button button1 = new Button(shell,SWT.PUSH);
button1.setText(
"Click me");
button1.setLocation(
0,0);
button1.setSize(
100,20);
button1.addSelectionListener(
new SelectionAdapter() {
        
public void widgetSelected(SelectionEvent e) {
                System.out.println(
"Button1 was clicked");
        }

}
);
Button button2 
= new Button(shell, SWT.ARROW);
button2.setSize(
20,20);
button2.setLocation(
250,200);
Button button3 
= new Button(shell, SWT.FLAT|SWT.TOGGLE);
button3.setSize(
50,50);
button3.setLocation(
0,150);

图例:

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

【上篇】
【下篇】

抱歉!评论已关闭.