前言:中午翻译了一点后就去和朋友打游戏了,玩了会儿后又回来编程序,发现新建一个线程去访问SWT里面的widget会抛出异常。长时间无果,索性还是过来把那个继续翻译得了。
List:
列表这个widget有一个item的集合(原文为collection of items);用户可以从list中选择一个item。
以下代码在shell上放置一个list的widget:
List list1 = new List(shell, SWT.MULTI);
List可以选择的样式有:BORDER,H_SCROLL,V_SCROLL,SINGLE和MULTI。
要向List添加item,你可以用setItems()方法,或者用add()方法。
下面的程序代码创建了两个list。第一个用了H_SCROLL样式,这样就拥有了一个横向的滚动条。第二个添加了MouseListener用来响应mouseUp()和mouseDown()事件(MouseListener后面会讲到)。
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
注意,在adapter里面用list2,一定要定义成final。
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
图例:
Combo:
一个Combo的widget允许用户从一个item集合里面选择一个item。用户也可以输入值到这个combo widget中。
以下代码放置一个Combo的widget到shell上:
Combo combo1 = new Combo(shell, SWT.DROP_DOWN | SWT.READ_ONLY);
Combo支持的样式有:BORDER,DROP_DOWN,READ_ONLY和SIMPLE。以上这些样式,都可以组合应用。
向Combo中添加item可以用setItems()方法。这个方法需要一个String的一维数组,每个元素代表一个item。同理,上面的List添加一组的item也有setItems()方法,而且也是需要一个一维String数组做参数。
可以用select()方法选择表中的item。这个方法的参数是一个整数——已选择的item的索引号。
下面的例子创建了三个Combo。第一个有一个下拉菜单,并且这个下拉菜单已经设置了坐标和大小。第二个是一个普通的Combo,并用setBounds设定了坐标以及大小。第三个是没有内容的Combo:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
图例:
Composite:
一个composite(嗯,不对应中文了,就叫composite好了)是一个容器,它可以容纳其他的widget。widget和Composite的关系,和Shell的关系差不多,而且是同样对待的,方法也一样。在composite中的widget的位置是相对widget所处的composite的,也就是说如果外面的composite移动了,那么这个composite内部的widget的位置也会移动,但是相对这个composite以及内部其他的widget是不动的。
以下代码放置一个Composite到Shell上:
Composite composite1 = new Composite(shell, SWT.BORDER);
Composite可选择的样式有:BORDER,H_SCROLL和V_SCROLL。
你可以设置composite的属性,比如background colour(背景颜色),但是你不能设置一个文本的值。(原文为:You can set properties of the composite, like background colour, but you cannot set a text value.)
Label label = new Label(composite1, SWT.NONE);
下面的代码一个composite放到一个composite的例子。第一个composite有一个边框而且设置了背景颜色,所以你很容易就能在屏幕上找到它。要使用setBackground()方法,你必须导入图形库并且创建一个颜色先:
import org.eclipse.swt.graphics.*;
Color myColor = new Color(display, 0, 0, 0);
注意,如果你没有给一个composite一个边框或者设置一个背景颜色,那你就很难在前台的shell窗口中找到它。第二个composite依附于前一个composite。它拥有一个横向滚动条和垂直滚动条以及一个List的widget。
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
图例:
Group:
group也是一个可以包含其他widget的容器。group看上去是一个被边框环绕,也许可能还有一个标题的widget。就和Composite一样,group内部的widget的位置是相对于外部的group来说的,如果外部的group在shell上移动了,那么内部的widget相对shell也会移动,但是widget相对group以及group内部的widget而言是静止的。
以下代码在shell上添加一个group:
Group group1 = new Group(shell, SWT.BORDER);
支持的风格样式有:BORDER,SHADOW_ETCHED_IN,SHADOW_ETCHED_OUT,SHADOW_IN,SHADOW_OUT,和SHADOW_NONE。
你可以给group设置一些标准的属性,比如大小、坐标、背景颜色等等。然而,group的主要用途是区分其他控件用的。group是composite的子类,他们的用法以及内部工作模式都很相似。group也有不同于composite的地方,比如它可以设置文字(setText):
group1.setText("Group 1");
把widget放到group中去就如同放到shell或者composite中去一样:
Button button = new Button(group1, SWT.PUSH);
下面的例子仅仅在主shell中用放置一个group,但是其中还内嵌了第二个group。因为group是和composite如此相像的widget,所以能够内嵌也变成很自然的事情。你还可以设置很多层的group嵌套用来在屏幕上安排好大量的widget。束缚你的仅仅是你的想象力了。
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
图例:
Running under Linux:
在这里介绍的widget同样可以运行在Linux下(GTK 和 Motif)。除了在亮度和显示上的一些区别外,在运行方式(原文为:behaviour)上我们还没有找到任何的不同。
嗯,到这里,简单的一些widget我算是翻译完了,其他的widget我会在高级篇里面翻译出来。Basic的第三篇翻译就是要讲关于Event的内容了,比如按钮监听键盘监听之类的东西了,嘿嘿。发现慢慢地翻译快起来了,呵呵。