Basic SWT Widegts 2nd

前言:中午翻译了一点后就去和朋友打游戏了,玩了会儿后又回来编程序,发现新建一个线程去访问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的内容了,比如按钮监听键盘监听之类的东西了,嘿嘿。发现慢慢地翻译快起来了,呵呵。

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值