280 likes | 433 Views
第八章 Applet 与图形用户界面. Application 和 Applet 是 Java 程序的两种基本形式,本章介绍 Java Applet 的基本工作原理和编程技术,简单讨论 Java 程序图形用户界面的设计和实现. WWW 工作原理. 发出请求. 包含 browser 的用户端. server 端. 发回网页. 静态网页的工作原理. 接受请求. 服务器端. 找到静态网页. 发送网页. Applet 的基本工作原理.
E N D
第八章 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指定的字符串。如果用户希望这个参数是其他类型,则要进行参数类型的转换在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_DESTROY • WINDOW_MOVED • KEY_PRESS • KEY_RELEASE • MOUSE_DOWN • MOUSE_UP • MOUSE_MOVE • MOUSE_ENTER • MOUSE_EXIT • MOUSE_DRAG • SAVE_FILE • GOT_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.*包中的根类Component类的子类,它的直接子类包括一个容器组件Container 和八个基本组件(Button,Label,Choice,TextComponent等)。Container是所有容器类的根类
AWT Sample application • JFC Sample application