前言:中午翻译了一点后就去和朋友打游戏了,玩了会儿后又回来编程序,发现新建一个线程去访问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后面会讲到)。
public void mouseDown(MouseEvent e) ...{
System.out.println(list2.getSelection()[0] +" wins");
}
public void mouseUp(MouseEvent e) ...{
System.out.println("Try again!");
}
} );
注意,在adapter里面用list2,一定要定义成final。
list1.setItems( new String[] ... {"Strawberry","Banana","Apple"} );
list1.add( " Pickle " );
list1.setBounds( 0 , 0 , 60 , 100 );
final List list2 = new List(shell, SWT.SINGLE | SWT.BORDER);
list2.setItems( new String[] ... {"Rock","Paper","Scissors"} );
list2.setBounds( 110 , 0 , 50 , 50 );
list2.addMouseListener( new MouseAdapter() ... {
public void mouseDown(MouseEvent e) ...{
System.out.println(list2.getSelection()[0] +" wins");
}
public void mouseUp(MouseEvent e) ...{
System.out.println("Try again!");
}
} );
图例:
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:
combo1.setItems( new String[] ... {"One","Two","Three"} );
combo1.select( 0 );
combo1.setLocation( 0 , 0 );
combo1.setSize( 100 , 20 );
Combo combo2 = new Combo(shell, SWT.SIMPLE);
combo2.setItems( new String[] ... {"Red","Green","Blue","Yellow"} );
combo2.setBounds( 50 , 50 , 200 , 150 );
combo2.select( 1 );
Combo combo3 = new Combo(shell, SWT.DROP_DOWN);
combo3.setLocation( 200 , 0 );
combo3.setSize( 50 , 50 );
图例:
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。
composite1.setBounds( 10 , 10 , 270 , 250 );
composite1.setBackground( new Color(display, 31 , 133 , 31 ));
Label label = new Label(composite1,SWT.NONE);
label.setText( " Here is a green composite " );
label.setBounds( 10 , 10 , 200 , 20 );
Composite composite2 = new Composite(composite1,SWT.H_SCROLL | SWT.V_SCROLL);
composite2.setBounds( 10 , 40 , 200 , 200 );
List list = new List(composite2,SWT.MULTI);
for ( int i = 0 ; i < 50 ; i ++ ) ... {
list.add("Item " + i);
}
list.setSize( 300 , 300 );
图例:
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。束缚你的仅仅是你的想象力了。
group1.setBounds( 30 , 30 , 200 , 200 );
group1.setText( " Group 1 " );
Button button = new Button(group1, SWT.PUSH);
button.setBounds( 10 , 20 , 80 , 20 );
button.setText( " I'm in a group " );
Label label = new Label(group1, SWT.NONE);
label.setBounds( 10 , 50 , 80 , 20 );
label.setText( " So am I!! " );
Group group2 = new Group (group1, SWT.NONE);
group2.setBounds( 10 , 100 , 150 , 50 );
group2.setBackground( new Color(display, 233 , 20 , 233 ));
group2.setText( " I'm a group inside a group " );
Button button2 = new Button(group2, SWT.PUSH);
button2.setBounds( 10 , 20 , 50 , 20 );
button2.setText( " Twice.. " );
图例:
Running under Linux:
在这里介绍的widget同样可以运行在Linux下(GTK 和 Motif)。除了在亮度和显示上的一些区别外,在运行方式(原文为:behaviour)上我们还没有找到任何的不同。
嗯,到这里,简单的一些widget我算是翻译完了,其他的widget我会在高级篇里面翻译出来。Basic的第三篇翻译就是要讲关于Event的内容了,比如按钮监听键盘监听之类的东西了,嘿嘿。发现慢慢地翻译快起来了,呵呵。