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

Basic SWT Widegts 2nd

2012年02月17日 ⁄ 综合 ⁄ 共 5128字 ⁄ 字号 评论关闭

前言:中午翻译了一点后就去和朋友打游戏了,玩了会儿后又回来编程序,发现新建一个线程去访问SWT里面的widget会抛出异常。长时间无果,索性还是过来把那个继续翻译得了。

 List:

列表这个widget有一个item的集合(原文为collection of items);用户可以从list中选择一个item。

以下代码在shell上放置一个list的widget:

List list1 = new List(shell, SWT.MULTI);

List可以选择的样式有:BORDERH_SCROLLV_SCROLLSINGLEMULTI

要向List添加item,你可以用setItems()方法,或者用add()方法。

下面的程序代码创建了两个list。第一个用了H_SCROLL样式,这样就拥有了一个横向的滚动条。第二个添加了MouseListener用来响应mouseUp()和mouseDown()事件(MouseListener后面会讲到)。

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!");
        }

}
);

注意,在adapter里面用list2,一定要定义成final。

List list1 = new List(shell, SWT.MULTI | SWT.H_SCROLL);
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支持的样式有:BORDERDROP_DOWNREAD_ONLYSIMPLE。以上这些样式,都可以组合应用。

向Combo中添加item可以用setItems()方法。这个方法需要一个String的一维数组,每个元素代表一个item。同理,上面的List添加一组的item也有setItems()方法,而且也是需要一个一维String数组做参数。

可以用select()方法选择表中的item。这个方法的参数是一个整数——已选择的item的索引号。

下面的例子创建了三个Combo。第一个有一个下拉菜单,并且这个下拉菜单已经设置了坐标和大小。第二个是一个普通的Combo,并用setBounds设定了坐标以及大小。第三个是没有内容的Combo:

Combo combo1 = new Combo(shell, SWT.DROP_DOWN|SWT.READ_ONLY);
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可选择的样式有:BORDERH_SCROLLV_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。

Composite composite1 = new Composite(shell,SWT.BORDER);
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);

支持的风格样式有:BORDERSHADOW_ETCHED_INSHADOW_ETCHED_OUTSHADOW_INSHADOW_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。束缚你的仅仅是你的想象力了。

Group group1 = new Group(shell, SWT.BORDER);
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)上我们还没有找到任何的不同。

GTK下 Motif下

嗯,到这里,简单的一些widget我算是翻译完了,其他的widget我会在高级篇里面翻译出来。Basic的第三篇翻译就是要讲关于Event的内容了,比如按钮监听键盘监听之类的东西了,嘿嘿。发现慢慢地翻译快起来了,呵呵。

 

 

 

 

 

 

 

 

 

抱歉!评论已关闭.