第八章 applet 与图形用户界面

28
第第第 Applet 第第第第第第第 Application 第 Applet 第 Java 第第第 第第第第第第 第第第第 Java Applet 第第第第第第第 第第第第第 第第第第 Java 第第第第第第第第第第第第第第

Upload: malcolm-sandoval

Post on 03-Jan-2016

205 views

Category:

Documents


0 download

DESCRIPTION

第八章 Applet 与图形用户界面. Application 和 Applet 是 Java 程序的两种基本形式,本章介绍 Java Applet 的基本工作原理和编程技术,简单讨论 Java 程序图形用户界面的设计和实现. WWW 工作原理. 发出请求. 包含 browser 的用户端. server 端. 发回网页. 静态网页的工作原理. 接受请求. 服务器端. 找到静态网页. 发送网页. Applet 的基本工作原理. - PowerPoint PPT Presentation

TRANSCRIPT

第八章 Applet 与图形用户界面

Application 和 Applet 是 Java 程序的两种基本形式,本章介绍 Java Applet 的基本工作原理和编程技术,简单讨论 Java 程序图形用户界面的设计和实现

WWW 工作原理

发出请求

发回网页

包含 browser的用户端 server 端

静态网页的工作原理

接受请求

找到静态网页

发送网页

服务器端

Applet 的基本工作原理

Applet 是特殊的 Java 程序,它不需要专门的解释器来执行它,相对于 Java Appliction 的解释器,如 JDK 的 java.exe , VJ++ 的 jview.exe , Java Applet 的解释器就是 Internet 的浏览器,确切地讲就是兼容 Java 的 Internet 浏览器。

Applet 的工作原理:

1 , .class 和 HTML 保存在服务器2 ,当浏览器向服务器请求下载嵌入了 Applet 的

HTML 文件时。3 ,下载到客户端后,由浏览器解释 HTML 中的

各种标记并显示在用户屏幕上,当浏览器遇到HTML 文件中的一个特殊标记时,表明嵌有 Applet 程序,浏览器会根据 Applet 名字和位置把其字节码文件从 WWW 服务器上下载到本地。

4 ,利用浏览器本身拥有的 Java 解释器执行该字节码。

8.2 Applet 类的使用

Java Applet 程序必须有一个主类,其父类是系统的 Applet 类,正是通过这个类才能完成 Applet 程序与浏览器的配合

1 、 Applet 类 存在于 java.applet 包中,从继承结构上说

属于用户图形界面的 java.awt 包,是系统类 java.awt.Panel 的子类,由于 Applet 类的特殊,系统专门为它建立了一个 java.applet 包

Applet 类是 Panel 的子类 (可查看源码验证)

Panel 类的作用:( 1 )包容和排列其他的界面元素,如按钮、对

话框等;( 2 )响应它所包容范围之内的事件,或把事件

向更高层次传递。Applet 类的作用: Applet 在继承上述作用的基础上,还具有一些

与浏览器和 Applet 生命周期有关的专门方法

Applet 类的主要方法实际运行中,浏览器在下载字节码的同时,自动创建一个用户 Applet子类的实例(对象)

完成初始化操作的 init() 方法 Applet 的字节码文件从 WWW 服务器下载后,

浏览器将自动创建一个 Applet 类的实例并调用它从 Applet 类那里继承来的 init() 方法。用户程序可以重载父类的 init() 方法,定义一些必要的初始化操作。

启动浏览器运行 Applet 的 start ()方法 Start() 方法在 init ()初始化之后被自动调用,或

者是 Applet 被重新启动时被系统自动调用。也就是说,当包含 Applet 的 HTML 页面被重新加载时,Applet 实例就会被重新启动并调用 start() 方法,但是 init() 方法只被调用一次

显示 Applet 界面的 paint() 方法 paint() 方法的主要作用是在 Applet 的界面中显

示文字、图形和其他界面元素。导致调用 paint() 方法的事件主要有三种:

1 、 Applet 被启动之后2 、 Applet 所在的浏览器窗口改变,包括大小、

移动、被遮挡、重新显示等。3 、 Applet 的其他相关方法被调用,如 repaint()paint() 方法有一个固定的参数 ----Graphics 类的

对象 g 。

暂停 Applet 前执行的 stop() 方法 stop() 方法类似于 start() 方法的逆操作,当用户

暂停 Applet 之前,浏览器将首先自动调用 stop() 方法(例如用户转去查看其它网页)。用户可以重载 Applet 类的 stop() 方法。消灭 Applet 之前执行的 destroy() 方法 当用户退出浏览器时,浏览器会自动调用此方法

来完成一些释放资源、关闭连接之类的操作。

8.3 Applet 与 HTML 文件的配合

在 HTML 中嵌入 Applet 的标记为<applet 参数 > </applet> 例如:<applet code= "Demo.class" width= "500" height= "300">

</applet>

此标记至少需包括三个参数:Code : 指明 Applet 字节码文件名Height: 指明 Applet 界面占据的区域的高度,以像素

为单位Width: 指明宽度,以像素为单位

其他可选的参数 :Codebase: 当 Applet 文件与 HTML 文档不在同一目录时 , 使用 codebase 来指明字节码文件的位置 , 这个位置使用 URL格式

Alt: 当浏览器因某种原因不能执行字节码文件时 ,就把 alt 参数指明的信息显示给用户

align: 表示 Applet 界面区域在浏览器窗口中的对齐情况

* 这些参数都应该包含在 <applet> 标记的右半尖括号的内部

向 applet 传递参数

通过 HTML 文件的 <param> 标记 ,applet可以从中获得所要的参数 , 使用方法为 :

<applet ……..>

<param name= 参数名 value= 参数值 >

……

</applet>

在 Applet 中利用 getParameter() 方法来获取 HTML 传递来的参数,这个方法有一个字符串参数,表明它所希望获取的 HTML 参数的名字 (即 name指定的参数名 ) ,方法的返回值是一个字符串对象,即 HTML 中 value指定的字符串。如果用户希望这个参数是其他类型,则要进行参数类型的转换

(见例 8_3)

8.4 java 图形用户界面概述

图形用户界面 (GUI) 的重要性:美观、易用、统一

为方便用户界面的开发 , 设计了专门的类库来生成各种标准图形界面元素,和处理图形界面的各种事件,这个类库就是 java.awt 包。 AWT 是 abstract windows toolkit(抽象窗口工具集)的缩写。 AWT 类库中的各种操作被定义成在一个并不存在的“抽象窗口”中进行,使得开发人员所设计的界面独立于具体的界面实现,可以适用于所有的平台。

JFC ( Java 基本类 ),包含 Swing 构件 ,Swing 是以 AWT 为基础的。

另外,还有 IBM公司 Eclipse项目里的 SWT 。

AWT 、 Swing 、 SWT 三者的联系与比较?

构成图形界面的元素和成分可分为三类:

容器:用来组织其它界面成分和元素的单元(如窗口)。容器内包含的成分和元素可能又是一个容器 ( 层层相套 )

控制组件:是图形用户界面的最小单位之一,它里面不再包含其他的成分。目前常用的控制组件有 : 选择类的:复选框 Checkbox 、单选按钮 CheckboxGroup ,下拉列表 List ;

文字处理类的:文本框 TextField 、文本区域 TextArea ; 命令类的:按钮 Button 、菜单 Menu 等。

用户自定义成分:它不能被系统识别和承认,通常只能起到装饰、美化作用,而不能响应用户的动作,也不具有交互功能。

8.6 Java 的事件处理

    Java 将图形界面的所有事件进行分门别类(鼠标、键盘及图形界面标准元素的改变分别对应不同事件)组成不同的事件类

8.6.1 JDK1.02 事件处理机制

1. 事件的产生事件是系统对其可能处于的某种状态或某种操作

的预先定义。Java 用 Event 类的对象来保存和表示事件。当用户在程序的运行过程中引发了一个系统可识别的事件时,事件将自动创建一个 Event 类的对象来表示这个事件,并在这个对象中保存该事件的相关信息。注: Event 的实例是产生事件时系统自动创建的,

不需要也不允许用户程序调用构造函数和 new运算符来创建 Event 对象。

Event 对象中的变量Public long when: 表示事件发生的时间,一般为系统内部安排事件处理排队

用。Public int id: 表示事件的类型,包括:WINDOW_DESTROYWINDOW_MOVEDKEY_PRESSKEY_RELEASEMOUSE_DOWNMOUSE_UPMOUSE_MOVEMOUSE_ENTERMOUSE_EXITMOUSE_DRAGSAVE_FILEGOT_FOCUS 等等

事件的响应和处理系统为每一个用户事件创建了一个 Event 对象之后,把这个对象发送给 AWT 构件来处理。所有 AWT 构件的祖先是 java.awt 类库中的 Component 类,它定义了下面这些方法:public boolean handleEvent(Event evt)定义为可以处理所有类型的事件。系统调用该方法时把需要它处理的事件 Event 对象 evt 作为参数传递给它,若此事件得到妥善处理,则方法返回 true ,否则返回 false ,表示还需要另一个 AWT 构件继续处理此事件。

public boolean handleEvent(Event e){// 重载处理事件的方法if(e.id==Event.WINDOW_DESTROY){// 用户点击窗口的关闭

dispose();//关闭窗口System.exit(0);//退出整个程序}

return super.handleEvent(e);// 使用原事件分配体系处理

}

public boolean action(Event evt,Object what)

处理所有用户产生的事件,通常当一个事件发生时,系统首先调用 handleEvent() 方法,如果用户没有重载及改变类库中原有的 handleEvent()方法,则这个方法将会自动调用 action() 方法。

public boolean mouseDown(Event evt,int x,int y)

public boolean keyUp(Event evt,int key)

用户(开发人员)的主要工作

上述方法可以被系统自动调用,所以编程人员的主要任务是在不同的 AWT构件中根据程序的需要覆盖并重写这些方法,使它们按照用户的需要来处理不同的事件。

事件处理顺序

1 ,先由处理常用事件的方法,如 mouseDown() , keyUp() 等来处理。

2 ,再由 action() , handleEvent() 来处理没有对应处理方法的其他事件。

3 ,若当前 AWT 构件不能处理发生在其中的事件,则通过事件处理方法的返回值 false ,将事件传递给其父对象处理。

8.8 GUI 标准组件概述

构建程序的图形用户界面的主要任务有两个: 创建各界面组件并排列成图形用户界面的外观; 定义这些组件对不同事件的响应从而完成图形

用户界面(交互)功能。    GUI 标准组件都是 java.awt.* 包中的根类 Com

ponent 类的子类,它的直接子类包括一个容器组件 Container 和八个基本组件( Button,Label,Choice,TextComponent 等)。 Container 是所有容器类的根类

AWT Sample application

JFC Sample application