The Spark of Thinking

Focus on Eclipse Tools.

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  3 随笔 :: 27 文章 :: 4 评论 :: 0 Trackbacks

Hello, world! 开始了解 Display Shell

在这一节中,我们从前面所列举出来的 Hello, world! 程序开始对 swt 进行一些初步的探索。所谓的初步是指,我们会介绍编写 swt 程序的基本思路,以及对两个重要的类 :Display Shell 作一些介绍。

因为这一节和前一节是分成两个部分贴出来的,所以我仍然将 Hello, world! 的代码段在下面列出来:

 1 package swtjfacesample;
 2
 3 import org.eclipse.swt.SWT;
 4 import org.eclipse.swt.widgets.Display;
 5 import org.eclipse.swt.widgets.Shell;
 6 import org.eclipse.swt.widgets.Text;
 7
 8 public   class  HelloSwt  {
 9      /* *
10      * Hello,world!
11      * 
12      * @param args
13       */

14         public   static   void  main(String[] args)  {
15         Display display  =   new  Display();
16         Shell shell  =   new  Shell(display);
17         
18         Text helloText  =   new  Text(shell, SWT.CENTER);
19         helloText.setText( " Hello,World! " );
20         helloText.pack();
21         
22         shell.pack();
23         shell.open();
24
25          while  ( ! shell.isDisposed())  {
26              if  ( ! display.readAndDispatch())  {
27                 display.sleep();
28             }

29         }

30         display.dispose();
31
32     }

33 }


代码段 2

这段程序虽然很简单,但是它反映了我们书写 swt 程序的步骤,这些步骤是:

1.       创建一个 Display 对象

2.       创建一个或者多个 Shell 对象,你可以认为 Shell 代表了程序的窗口。

3.       Shell 内创建各种部件( widget

4.       对各个部件进行初始化(外观,状态等),同时为各种部件的事件创建监听器( listener

5.       调用 Shell 对象的 open() 方法以显示窗体

6.       各种事件进行监听并处理,直到程序发出退出消息

7.       调用 Display 对象的 dispose() 方法以结束程序。

 

 

 

Hello,world! 程序中,为了让程序更加简单,我们没有创建事件监听器,在以后的内容中会进行专门介绍。

现在让我们稍微深入一些,看一下这些 Display,Shell 有什么作用以至于我们每个程序都必须有它们存在。

Display: 与操作系统沟通的桥梁

我们在前面说过,每个 swt 程序在最开始都必须创建一个 Display 对象。 Display 对象起什么作用呢?它是 swt 与操作系统沟通的一座桥梁。它负责 swt 和操作系统之间的通信。它将 swt/JFace 的各种调用转化为系统的底层调用,控制操作系统为 swt 分配的资源。同时我们也可以通过 Display 对象得到操作系统的一些信息。

Display 是一个 幕后工作者 ,它为 swt/JFace 提供支持,但是你并不能够从某个用户界面中看到它的影子。

在前面的 Hello,world! 程序中,我们可以看到构建一个 Display 对象是和普通的 Java 对象一样通过构造函数实现的。它为实现图形界面准备了最基本的条件。而在程序结束时我们必须显式地调用 dispose() 方法来释放程序运行中所获得的资源。一般来说,一个程序只需要一个 Display 对象,当然没有人禁止你创建多个 Display 对象。但是在 swt javadoc 中,我们可以看到关于这个问题一些描述:

“Applications which are built with SWT will almost always require only a single display. In particular, some platforms which SWT supports will not allow more than one active display. In other words, some platforms do not support creating a new display if one already exists that has not been sent the dispose() message.”

Display 有着众多的方法,我们不可能一一介绍。在这里只挑选几个可能会比较常用的作一些简单介绍。

l          setData() getData() :这一对函数允许我们为 Display 对象设定一些数据, setData() 的参数中 key value 类似于我们在使用 Map 对象中 key value 的含义。

l          getShells() 得到关联到该 Display 对象的所有没有 dispose Shell 对象

l          getCurrent() 得到与用户交互的当前线程

l          readAndDispatch() 得到事件并且调用对应的监听器进行处理

l          sleep() 等待事件发生

Shell: 窗口

一个 Shell 对象就是一个窗口。你可以在上面放置各种部件创建丰富的图形界面。

我们都知道窗口有很多种,比如窗口有可以调整大小的,有不可以的,有的没有最大化最小化按钮。这些窗体的特征在 swt 中被成为风格( style )。一个窗体的风格可以用一个整数进行定义。这些风格的定义在 org.eclipse.swt.SWT 中。

Shell 对象可用的风格包括: BORDER, CLOSE, MIN, MAX, NO_TRIM, RESIZE, TITLE , PLICATION_MODAL, MODELESS, PRIMARY_MODAL, S YSTEM_MODAL

这些风格我们不作一一介绍,你可以从他们字面意义看出一些含义来,当然也可以参考对应的 javadoc

我们可以在一个 Shell 的构造函数中定义它的风格,比如在前面的 Hello,world! 程序中,我们可以这样定义 Shell  

Shell shell  =   new  Shell(display,SWT.CLOSE  |  SWT.SYSTEM_MODAL);

   

最后得到的窗体没有最大化和最小化按钮,并且大小是固定不变的。

因为 swt 运行于各种平台之上,而这些平台上的窗口管理器千差万别,所以所有这些风格都不是肯定可以实现的。在 swt javadoc 中,这被称为暗示( hints )。

Shell 对象的方法大都和 GUI 有关,比如 setEnabled() 设定了窗体是否能够和用户进行交互, setVisble() 设定了窗体是否可见, setActive() 将窗体设为当前的活动窗口。

我们可以用 open() 方法打开一个窗体, close() 方法关闭一个窗体。

小结

本节讨论了 Display Shell 的一些概念,这是我们以后进一步了解 swt 的基础。在下一节中,我将介绍各种部件( widget )的用法,所谓部件,是指文本框,标签等 UI 实体。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=368099

posted on 2006-07-20 17:32 The Spark of Thinking 阅读(199) 评论(0)  编辑  收藏 所属分类: SWT/JFace

只有注册用户登录后才能发表评论。


网站导航: