Presentation is loading. Please wait.

Presentation is loading. Please wait.

SWT-JFace 南京大学软件学院 2009 1.

Similar presentations


Presentation on theme: "SWT-JFace 南京大学软件学院 2009 1."— Presentation transcript:

1 SWT-JFace 南京大学软件学院 2009 1

2 SWT-JFace SWT/JFace是一套用户图形界面的API
JFace是为了方便开发SWT程序,在原有SWT基础上建立的一个更加容易使用,功能更强大的图形包JFace 虽然我们都知道SWT和JFace是工具(套件),但更科学地讲它们是软件类库。它们由包含java类和接口的文件包组成。虽然SWT和JFace实现了相同的功能,但它们产生用户界面的机理却是迥然不同的。 比喻:swt就像一辆手动波汽车,JFace就像一辆自动波汽车。手动波汽车给了你更大的人为发挥控件,具有很强的灵活性,但若你技术不好,死得也快。自动波汽车,限制了你的灵活性,但你只需要回开就行,不需要研究太多东西。 形成的理由:swing包不争气 与swing的区别:1设计理论,2资源管理,3显著特征 许可证: Eclipse软件基金会是在CPL框架下向公众发布Eclipse的。这一许可协议和开放源代码组织的许可协议方案是完全兼容的,并且通过授权免特许权使用费的代码允许作完全的商业使用并可以在全球范围内再发布。这意味着任何人可以使用源代码,修改源代码并且销售其最终产品。 如需详细信息,可以访问: 虽然某些平台部件是在特殊许可条件下发布的,但是由于整个SWT和JFace是在CPL框架范围内的,所以这使得在全部可支持平台内开发商业SWT和JFace应用程序成为了可能。 对于Windows平台的支持还有一个预想不到的好处:你可以在SWT容器小部件内直接嵌入ActiveX控制。Eclipse平台使用这一工具方式嵌入微软网页浏览器控制来获得嵌入的网页浏览功能。

3 安装SWT Designer 首先下载SWT Designer,它是Eclipse开发环境下的一个SWT图形界面开发插件包
下载的网址:

4 SWT中常用的几个包及功能 org.eclipse.swt.widgets:该包中提供最基本的图形组件,包括按钮、文本框、标签和下拉菜单等。在该包中最基本的两个类是实现程序主窗口的shell和实现类似Panel的Composite容器类 org.eclipse.swt.event:该包中提供了与事件处理相关的监听器接口以及对应事件类,地位类似于Java AWT中的java.awt.event包 org.eclipse.swt.layout:该包中提供了与图形界面布局管理相关的类 org.eclipse.swt.custom:该包提供了对基本图形界面组件扩展的一些组件 org.eclipse.swt.graphics:该包提供与图片设置、鼠标指针设置、字体设置及绘图相关的API

5 SWT-JFace SWT-JFace形成的理由
1998年Sun发布Swing,Swing具有迷人的特性,但同时也使程序发布日益复杂,运行效率低下。原因有 Swing的渲染 Swing的自动垃圾回收机制 Swing的设计架构

6 SWT-JFace SWT-JFace区别Swing
Swing和SWT/JFace均会产生一个基于Java的平台无关的GUI,但他们实现方法迥异 SWT/JFace最显著的特征是直接调取操作系统,使用底层平台的组件,而不是自己重建 SWT/JFace的另一个重要特性是不依赖于垃圾自动回收机制

7 SWT-JFace SWT-JFace支持平台 Windows Windows CE (ARM PocketPC)
Windows CE (ARM PocketPC, J2ME profile) Linux (x86/GTK 2) Linux (x86_64/GTK 2) Linux (PPC/GTK 2) Linux (x86/Motif) Solaris 8 (SPARC/GTK 2) Solaris 8 (SPARC/Motif) QNX (x86/Photon) AIX (PPC/Motif) HP-UX (HP9000/Motif) Mac OSX (Mac/Carbon)

8

9 SWT-JFace 小结 让我们感谢IBM吧 争论SWT-JFace/Swing是没有意义的

10 SWT-JFace SWT-JFace编程起步 SWT的重要类Display,Shell 一个SWT sample
JFace的重要类ApplicationWindow 一个SWT/JFace sample

11 SWT-JFace import org.eclipse.swt.*; import org.eclipse.swt.widgets.*;
public class HelloSWT { public static void main ( String [] args ) { Display display = new Display(); Shell shell = new Shell( display ); Text helloText = new Text( shell, SWT.CENTER ); helloText.setText("Hello SWT!"); helloText.pack(); shell.pack(); shell.open(); while ( !shell.isDisposed() ){ if ( !display.readAndDispatch() ) display.sleep(); } display.dispose(); 绝大部分的SWT应用程序都是有着如下的三段式的结构: 第一部分以生成一个Display和Shell类的实例开始。这一过程是GUI获取底层平台的资源并为其他小部件开辟了一个主窗口。 第二部分是在Shell上加入一个文本小部件,虽然这很简单,但是对于SWT应用程序所作的事情可一样也不能少。它需要处理添加和设置GUI功能生效的阻断。小部件和(容器内)的小部件分组作为Shell的子部件而添加入。 每一个小部件的监听器和事件都做了定义,以便用户的就此开始动作。本节中达代码也对小部件、容器和事件设定了参数以确保它们按要求预定的显示和行为。在此,pack()方法告诉Shell和文本组件使用它们所需的空间。 最后一个部分代表这GUI的操作,直到这一刻为止,整个应用程序的代码除了初始化变量还没有干任何事情。但是一旦Shell的open()方法被调取,应用程序的主窗口就成形其子部件在display中被渲染。只要Shell保持open状态,Display的实例就会使用其readAndDispatch()方法来追踪在操作系统事件队列中与用户相关的事件。当某一个动作促使窗口关闭时,与Display对象(包括Shell以及其子部件等)相联系的资源就全部释放。

12 SWT-JFace Display Display类并不是可见的,它负责监管着GUI的资源并管理着和操作系统的通信。也即意味着它不光要关注着它自己的窗口是如何显示、移动和重画的,还同时要确保诸如鼠标点击、键盘敲击等事件送达小部件并去处理它们 Display类的主要任务就是负责将你的代码SWT和JFace命令翻译成底层的命令来调取操作系统。这一过程分两部分组成,并随着Display类的实例的产生而开始。首先,Display对象构建一个代表着操作系统平台的OS类的实例。这个类通过一系列被称之为原生方法的特殊Java处理过程提供了接触计算机底层资源的途径。然后像调度员一样工作 有两个在任何基于SWT的GUI中必须用到的方法,第一个是Display(),它产生一个类的实例并将其和GUI相联系;第二个是getCurrent(),它返回一个应用程序的主线程,用户界面线程。第二个方法通常通常是以dispose()方法来终结Display的操作

13 SWT-JFace Shell Display类提供了窗口管理一样,Shell类扮演着GUI主窗口的角色
每一个SWT/JFace应用程序都是基于其主Shell对象上的小部件的,但是在应用程序中可能还存在着其他的Shell对象,它们通常是和一些临时窗口或是对话框相联系的。这些Shell并不附着于Display实例,因而被看作是从属性的Shell。附着于Display的shell被成为顶层shell。Shell有着大量的属性,这些属性可以允许用户修改状态值或是读取信息。这样的特性形成了组件的风格。你也可以通过向Shell的构造器加入第二个参数来控制Shell的风格。Shell接受了一个顶层窗口的默认风格,称为“SHELL_TRIM”。标题栏(SWT.TITLE)和用户可以最小化SWT.MIN)、最大化(SWT.MAX)、改变尺寸(SWT.RESIZE)和关闭(SWT.CLOSE)shell。至于其他的shell的默认风格,DIALOG_TRIM则确保着对话框的shell有一个标题栏、一个活动区的边界(SWT.BORDER)和被关闭的能力。在你的GUI之内,你可以设定shell或其他小部件的风格参数值,若是多个值则可以用“|”相连。除了提到的属性,你还可以确定shell的形态,以限定用户修改shell的状态。有一个形态对话框会将除对话框以外的动作全部阻断以获取用户的关注。它不能被移动或是改变尺寸,只可以使用给予的按钮关闭或是取消

14 SWT-JFace ApplicationWindow类中的设置方法 ApplicationWindow方法 功能
addMenuBar() Configures the window with a top-level menu addToolBar() Adds a toolbar beneath the main menu addStatusLine() Creates a status area at the bottom of the window setStatus(String) Displays a message in the status area getSeparator() Returns the line separating the menu from the window setDefaultImage(Image) Displays an image when the application has no shell setExceptionHandler(IExceptionHandler) Configures the application to handle exceptions according to the specified interface

15 SWT-JFace JFace 适配器分类 功能
Eclipse文档中使用了两个术语来指代和SWT小部件协同的JFace类:助手类和基于模型的适配器 这些适配器可以被分为四大类 适配器分类 功能 阅读器:分离小部件的外观和信息 动作和实施:简化和组织事件处理进程 图案和字体注册:管理和分配/释放图案、字体资源 对话框和向导:扩展SWT对话框和用户互动的能力 第一个也是广为使用的大类包含有Viewer(阅读器)类。在SWT中,一个GUI组件的信息和外观通常是被绑定在一起的。然而,viewer将这些方面分离了,并允许在不同的表单中使用相同的信息。例如,在SWT中的树的信息是不能被从树对象中分离出来的,但是在JFace的一个树阅读器中的相同信息却可以在一个表阅读器或是列表阅读器中显示。 第二个大类包含有动作和实施。这些适配器简化了事件的处理,并将针对用户命令的反应从引发那种反应的GUI事件中分离出来。这一点可以通过实例得以很好地说明。在SWT中,如果有四个不同的按钮都是去关闭一个对话框的,然后你必须要写上四遍不同的事件处理规程(代码)即便它们完成着相同的结果。在JFace中,这四个规程可以整合在一个动作中,然后JFace可以自动会将这四个按钮作为该行为的实施者。 第三大类包含有图案和字体的注册。在SWT中,如何保持字体和图案的内存资源分配以最小是相当重要的,因为它们在消耗着操作系统的资源。但是由于有了JFace的注册机制,这些资源可以按需分配和释放。因此如你使用多个的图案和字体,你不必关注如何地手工回收垃圾。 最后一个大类包含有JFace的对话框和向导。这一些由于它们拓展了SWT对话框的能力,应该是最容易能够被理解的。JFace提供的对话框可以展示信息、提示错误、显示某一过程的进度,额外的,JFace还提供了一组特别的对话框称为:向导。向导指引着用户完成一组任务,如:安装软件或是设置一个输入文件等

16 SWT-JFace import org.eclipse.jface.window.*; import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*; public class HelloSWT_JFace extends ApplicationWindow { public HelloSWT_JFace() {super(null);} protected Control createContents(Composite parent) { Text helloText = new Text(parent, SWT.CENTER); helloText.setText("Hello SWT and JFace!"); parent.pack(); return parent;} public static void main(String[] args) { HelloSWT_JFace awin = new HelloSWT_JFace(); awin.setBlockOnOpen(true); awin.open(); Display.getCurrent().dispose();}} 第一个方法是HelloSWT_JFace(),它构造了主类的一个实例。任何的分配过程中需要执行的设置和通信动作都需在此编写代码。而在HelloSWT_JFace类中这倒是不需要的,因为这个类仅调用了其超类的一个构造器。 第二个方法createContents()处理窗口的设计。由于ApplicationWindow的可视化部分不是直接可得的,这一方法将与一个被成为合成器的小部件容器相联系来控制GUI的外观。这个容器对象作为任何GUI容器的父对象并需要被加入到应用程序中。在所有的小部件生成、设置以及加入父对象后,createContents()方法将该合成器返回主窗口进行显示。 这个应用程序的最后一部分是main()方法,该方法负责照看GUI的真实运作。在ApplicationWindow的资源分配完毕后,这个方法就负责设置窗 口的显现,直至setBlockOnOpen()方法以一个真值被调用时关闭。然后,ApplicationWindow的open()方法被调用,根据createContents()方法返回的合成器来显示窗口。而open()方法之后的代码仅当窗口关闭时才发生作用。再后,程序使用dispose()方法来释放GUI的Display实例资源。因为在HelloSWT_JFace中的每一个小部件都是display的子对象,丢弃了display对象也释放了程序中每一个GUI组件


Download ppt "SWT-JFace 南京大学软件学院 2009 1."

Similar presentations


Ads by Google