第八章 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的子类 (可查看源码验证) (1)包容和排列其他的界面元素,如按钮、对话框等; (2)响应它所包容范围之内的事件,或把事件向更高层次传递。 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: 指明宽度,以像素为单位
*这些参数都应该包含在<applet>标记的右半尖括号的内部 其他可选的参数: Codebase:当Applet文件与HTML文档不在同一目录时, 使用codebase来指明字节码文件的位置,这个位置使用URL格式 Alt: 当浏览器因某种原因不能执行字节码文件时,就把alt参数指明的信息显示给用户 align:表示Applet界面区域在浏览器窗口中的对齐情况 *这些参数都应该包含在<applet>标记的右半尖括号的内部
向applet传递参数 通过HTML文件的<param>标记,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_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