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

来源:互联网 发布:网络十大神曲 编辑:程序博客网 时间:2024/06/05 17:44

窗口是创建图形用户界面的基础,因此,在介绍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编程时一定要注意,为了防止出现内存泄漏的情形,一定要释放所有显式创建的窗口小部件所占用的内存资源。

0 0