Eclipse编程之旅:Shell入门(1)


窗口是创建图形用户界面的基础,因此,在介绍swt编程时,我们的第一项任务就是熟悉该库中用于开发各种类型的窗口的类——shell。

实际上,在swt中要想创建一个窗口,至少要用到两个类:display和shell。display负责处理所有swt窗口小部件和操作系统之间的交互,比如我们可以通过display的方法来查询操作系统:哪个控件获取了焦点,当前打开了哪些窗口等等。简单的说,它的功能在于实现了窗口的管理。与display不同,shell的实例为我们提供了真正可见的窗口,该窗口一般作为主窗口使用,我们可以在此放置其它窗口部件。需要注意的是,这些窗口是由桌面(ms windows)或窗口管理程序(unix或linux系统)来管理的。shell的实例可以直接从display创建,也可以从父代shell创建。

一、建立第一个shell

为了让读者对shell有一个感性认识,我们先建立一个最简单的窗口。要建立一个窗口,有两件事是必不可少的:首先,为display类创建一个实例,然后,将该实例传递给shell类的构造函数,从而创建一个shell类的实例。这样,我们就建立一个由display管理的顶层窗口。具体代码如下所示:

例1.我们的第一个shell

importorg.eclipse.swt.widgets.*; public class myshell { myshell( )    { display display = new display( ); shell shell = new shell(display); shell.setsize(600,600); shell.open( ); while(!shell.isdisposed( )){ if(!display.readanddispatch( )) display.sleep( ); } display.dispose( ); } }

下面对关键代码作简要介绍,其中下面两行是用于为display和shell类创建实例:

display display = new display( ); shell shell = new shell(display);

接下来两行代码的作用在于,将窗口的初始尺寸设为600x600像素,然后调用open()函数将shell窗口显示在屏幕上:

shell.setsize(600,600); shell.open( );

再下面的代码是建立shell的事件循环:

while(!shell.isdisposed( )){ if(!display.readanddispatch( )) display.sleep( ); }

shell需要响应一些事件,其中某些是由操作系统引起的,另外一些是由用户引起的,如用户点击了最大化按钮以及关闭shell创建的窗口等。事件循环一直侦听这些事件,然后将这些事件转发给相应的处理程序,这是由display类的readanddispatch()方法来完成的。这意味着,你创建的每个shell必须具有它自己的事件循环。如果创建的shell没有事件循环,或者事件循环失效的话,它马上就会被除去。一般情况下,事件循环会一直执行下去,直到shell类的isdisposed( )方法返回值为true(即窗口已被用户关闭)为止。

最后这一行表示释放创建display时所获取的内存资源。

display.dispose( );

在swt编程时一定要注意,为了防止出现内存泄漏的情形,一定要释放所有显式创建的窗口小部件所占用的内存资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值