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

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

Java 程序分类 Java Application :是完整程序,需要独立的解 释器解释运行;以 “.java” 为后缀的文件,以 main() 方法作为程序入口,由 java 编译器编译生 成字节码,由 Java 解释器加载执行字节码。 Java Applet 没有 main() 方法作为程序入口,是嵌在.
第一章 Java 程序设计技术 概述  什么是 Java 语言  一个简单的 Java 程序  程序的编译和运行  常见错误  使用 Java 核心 API 文档.
程序设计语言基础 软件工程系 秦晓燕. 课程目标 了解面向对象程序设计的思想,以及软件 开发流程。 学习 Java 语言的基本概念和编程方法,基 本掌握 Java 类库的使用。 能够利用所学的方法开发简单的小型应用 程序.
Java 程序设计 案例教程 北京大学出版社 第 01 章. Java 程序设计案例教程 第 01 章 Java 语言与面向对象程序设计 Java 语言的历史 Java 语言的特点 Java 程序的分类 Java 环境配置 Eclipse 的安装 Java 程序的调试 教学目标.
JAVA 概述 主讲:张雷. J2ME API 地址: 广东科贸信息工程 张雷学习要求 了解各种程序设计语言及其特点 了解各种程序设计语言及其特点 了解 JAVA 的发展史和其特点 了解 JAVA 的发展史和其特点.
第四章 类、对象和接口.
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
项目6 通用堆栈.
第1章 Java语言概述.
《 Java开发环境配置》 主讲人:耿力.
Java 2实用教程(第3版)教学课件 主讲教师:张国平
JAVA程序设计 天津工程职业技术学院计算机工程系软件技术教研室.
Java程序设计教程 第一讲 Java概述.
Java的程式架構與基本觀念 Java語言的歷史 Java程式的開發環境 Java程式的架構 輸出與輸入物件之使用 工具使用方法介紹
四資二甲 第三週作業 物件導向程式設計.
北京科技大学天津学院 信息工程系 面 向 对 象 程 序 设 计 第1讲 Java初探 主讲:于静.
第二章 JAVA语言基础.
第二部分 Java语言基础篇 第4章 Java语言与面向对象 (之一).
第1章 java简介及环境搭建 第1章 Java简介及开发环境搭建.
Ch07 介面與多重繼承 物件導向程式設計(II).
Ch02 視窗Swing套件 物件導向系統實務.
Ch08 巢狀類別 物件導向程式設計(II).
程式設計實作.
Go语言就业指南 岳东卫 技术总监 讲师的CSDN博客地址
2018/11/15 面向对象与多线程综合实验-GUI设计 教师:段鹏飞.
2018/11/20 第一章 Java概述 武汉大学计算机学院计算机应用系 2018/11/20 14:33.
快乐玩转eclipse plugin插件开发之swt
第一个Android程序 本讲大纲: 1、创建Android应用程序 2、Android项目结构说明 3、运行Android应用程序
本單元介紹何謂變數,及說明變數的宣告方式。
开发Eclipse插件的基本步骤 插件通过添加到预定义的扩展点来向平台添加功能。要将程序代码变成插件,需要: 决定插件如何与平台集成
程式設計實作.
CH09 套件 物件導向程式設計(II).
Java软件设计基础 5. 继承与多态.
Java语言程序设计 第五部分 Java异常处理.
2018/12/7 Java语言程序设计 教师:段鹏飞.
Java基础入门 第1章 Java开发入门 · Java语言的特点 · Java开发环境的搭建 · 环境变量的配置 · Java的运行机制.
1-1-1作業系統的功能 提供使用者操作介面 提供程式執行環境 控制輸入\輸出程序 分配系統資源 管理與維護磁碟中的檔案
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
第9讲 Java的继承与多态(一) 类的继承 子类的创建 方法覆盖.
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
第一章 Java语言概述.
Java程序设计 第2章 基本数据类型及操作.
第5讲 使用类和对象编程(三) 内部类 实例 程序控制结构 选择语句.
CH04 視窗中元件排排坐 物件導向系統實務.
C/C++/Java 哪些值不是头等程序对象
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
第1章 Java语言概述 学习目标 本章要点 上机练习 习 题.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
《JAVA程序设计》 语音答疑 辅导老师:高旻.
開發Java程式語言的工具 JDK.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第二章 基于CORBA的分布式平台 苗启广 计算机学院.
Interfaces and Packages
第二章 Java语法基础.
第二章 Java基本语法 讲师:复凡.
第二章 Java基本语法 讲师:复凡.
第6章 面向对象的高级特征 学习目标 本章要点 上机练习 习 题.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
辅导课程十二.
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
迴圈(重複性結構) for while do while.
判斷(選擇性敘述) if if else else if 條件運算子.
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
Summary
Presentation transcript:

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

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

安装SWT Designer 首先下载SWT Designer,它是Eclipse开发环境下的一个SWT图形界面开发插件包 下载的网址:http://www.swt-designer.com

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

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

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

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)

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

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

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以及其子部件等)相联系的资源就全部释放。

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

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的状态。有一个形态对话框会将除对话框以外的动作全部阻断以获取用户的关注。它不能被移动或是改变尺寸,只可以使用给予的按钮关闭或是取消

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

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

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组件