SWT/JFace开发入门指南(二)

原创 2005年04月29日 15:50:00

Hello, world!开始了解DisplayShell

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

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

 1package swtjfacesample;
 2
 3import org.eclipse.swt.SWT;
 4import org.eclipse.swt.widgets.Display;
 5import org.eclipse.swt.widgets.Shell;
 6import org.eclipse.swt.widgets.Text;
 7
 8public 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对象。但是在swtjavadoc中,我们可以看到关于这个问题一些描述:

“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()的参数中keyvalue类似于我们在使用Map对象中keyvalue的含义。

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

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运行于各种平台之上,而这些平台上的窗口管理器千差万别,所以所有这些风格都不是肯定可以实现的。在swtjavadoc中,这被称为暗示(hints)。

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

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

小结

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

SWT/JFace开发入门指南(六)

使用Layout管理UI布局我们在前面在一些例子中已经使用过Layout了。那么Layout到底是做什么的呢?我们知道,在设计用户界面时候,我们可以采用的一种办法是手动的为每个部件设置合适当大小和位置...
  • jayliu
  • jayliu
  • 2005-05-19 19:31:00
  • 5840

SWT/JFace开发入门指南(九)

JFace的Hello,world!我们仍然是从一个最简单的Hello,world!开始介绍JFace。为了更形象一些,首先把程序列出来: 1  2 public class HelloJface e...
  • jayliu
  • jayliu
  • 2005-06-17 18:17:00
  • 9133

java速度入门二

这篇主要是关于java中的oop的,简单的实现了一些oop特性的一些东西。 两个例子: 1. Circ.java [java] view plain...
  • qianji7112
  • qianji7112
  • 2014-05-03 00:18:00
  • 1231

SWT/JFace开发入门指南(一)

写在前面的话终于决定提起笔来写一篇关于swt和JFace编程的文章。在开始之前,我想先介绍一下你能够从将要出现的这一系列文章里得到什么,以及更重要的,你不能得到什么。我们的时间是如此之重要,以至于我们...
  • jayliu
  • jayliu
  • 2005-04-29 11:53:00
  • 16457

SWT/Jface开发入门指南(十一)

JFace中的工具条和菜单前一节中我们简单介绍了一下Action。其实所谓的Action就是一个最常用的事件,举个例子来说,对于一个按钮来说它可以有多个事件,比如按键,焦点,鼠标,等等等等吧,但是实际...
  • jayliu
  • jayliu
  • 2005-11-06 13:12:00
  • 7562

SWT/JFace开发入门指南(三)

初步体验widget 大家好,五一已经过去了,你们玩得开心么?在前面的两篇文章中,我向大家介绍了swt的一些基本知识,现在让我们继续下去讨论一下swt中的widget相关的一些知识以及介绍几种最为简单...
  • jayliu
  • jayliu
  • 2005-05-10 17:31:00
  • 10197

SWT/JFace开发入门指南(十)

JFace中的事件模式大家好,因为工作的事情搞了一个多月,现在终于暂时安定下来了。这一系列的文章我也会继续往下写。在这一节中,我会向大家介绍JFace中的事件模式。其实我相信这篇文章的读者应该大部分都...
  • jayliu
  • jayliu
  • 2005-10-17 08:34:00
  • 11137

SWT开发Java应用程序GUI入门

第一次做了Java GUI,我选择用elipse自己的前段开发工具 SWT/JFace。这篇文章是基于eclipse MARS.2.  用SWT编写的GUI的风格如下:                ...
  • sahusoft
  • sahusoft
  • 2016-07-10 11:29:41
  • 15087

Eclipse+SWTJFace开发实战精解,SWT例子,Eclipse开发入门与项目实践+源代码

  • 2009年01月04日 11:01
  • 11.19MB
  • 下载

SWT/JFace开发入门指南(七)

几种特殊的部件好像因为大家的抱怨比较多,感觉这一段csdn的blog似乎又有恢复稳定的迹象了,^_^。前面的两节中,我都没有作一些详细的介绍,而是推荐了两篇文章给大家,可能你会觉得有点不习惯,不过我觉...
  • jayliu
  • jayliu
  • 2005-05-25 19:23:00
  • 8340
收藏助手
不良信息举报
您举报文章:SWT/JFace开发入门指南(二)
举报原因:
原因补充:

(最多只允许输入30个字)