单元三 Applet编程

一、Applet:可以嵌入HTML文件的Java程序。
 1.Applet的语言特点:
  Applet类扩展而创建的用户Applet新类。
   类定义举例:public class hello2 extends Applet
  Applet依赖于浏览器的调用。
   通过〈Applet〉标记嵌入在HTML文件中。
 2.HTML中Applet标记的主要属性:
  Code=Applet文件标识。
  Codebase=Applet文件所在路径。
  width=Applet显示区域的宽度。
  height=Applet显示区域的高度。
  name=Applet的符号名,用于同页面不同Applet之间的通信。
 3.Applet的生命周期:

  init()、start()、stop()、destroy()方法都是Applet类中已经定义的方法,
  系统根据上述规则自动执行Applet的生命周期。
  用户Applet中也可重新定义这些方法(重载)。
 例3.1 了解Applet的生命周期
  首先执行init()方法,构造了Car类的实例Car1,并计算了price1和mycar1。
  然后执行start()方法,计算了price2。
  然后执行paint()方法,在页面上显示Price1和price2的信息。

二、通过HTML文件向Applet传递信息
 1.在HTML文件中使用〈Param〉标记:
  〈Applet code=Applet文件 width=xxx height=xxx〉
  〈Param name=参数名 value=参数值〉
  〈Param name=参数名 value=参数值〉
  ............
  〈/Applet〉
 2.在Applet中使用getParameter(参数名)获取信息
 例3.2 从HTML文件中获取信息的Applet
  设置了两个参数:MANU和MODEL。
  由HTML文件提供实际信息,Applet获取参数值后进行处理。
  不同的HTML页面提供不同的信息,运行同一个Applet,可获得不同的结果。

三、Applet中的信息输出:paint()方法和Graphics类
  在Applet中,是通过paint()方法实现信息输出的,即在浏览器窗口中显示文字、图形、图象等各种形式的信息。
  paint()方法中定义了Graphics类对象g,使用该对象的各种方法实现文字、图形、图象的输出。
 1.显示字符串:drawString(字符串,x坐标值,y坐标值)
 2.字体处理:
  Font类:字体信息及其处理函数组成的类。
  创建一个字体类对象:Font myfont=new Font(字体名,字型,字号)
   字体类对象中包含的主要信息:字体名、字型、字号。
   获取字体对象的字体名信息:字体对象.getName()
   获取字体对象的字体族信息:字体对象.getFamily()
   获取字体对象的字型信息:字体对象.getStyle()
   获取字体对象的字号信息:字体对象.getSize()
  获取Graphics类对象g的字体属性:Font cur_font=g.getFont()
   设置图形类对象的字体:g.setFont(字体对象)
  例3.3:Font信息的读取和设置
   功能:显示当前使用的Font信息,并用指定的字体显示“Welcome to Our Website!”
   说明:String.valueOf(n):将整形量n转换为字符串。
 3.颜色处理:
  Color类:颜色信息及其处理函数组成的类。
  创建颜色类对象:Color mycolor=new Color(红色成分值,绿色成分值,兰色成分值)
   成分值:0~255的整数。
   Color类中定义了若干颜色常量,可直接引用。
  获取Graphics类对象g的颜色属性:Color cur_color=g.getColor()
   设置图形类对象的字体:g.setColor(颜色对象)
  例3.4:Color信息的读取和设置
   功能:显示彩色文字“Welcome to Our Website!”
   说明:Math.random() 获得一个0~1的随机数。
      Math.floor(x) 获得一个小于或等于x的整数(仍为浮点数类型)。
      (int)x 将浮点数x转换为整型量。
  练习3.1:控制Graphics对象的颜色和字体。

  练习3.2:从页面文件获取信息。

 4.图形、图象的输出
  画直线:drawLine(x1,y1,x2,y2)
       (x1,y1):起点坐标
       (x2,y2):终点坐标
       若起点坐标=终点坐标:画点
  画矩形:
   边框矩形:drawRect(x,y,width,height)
        (x,y):矩形左上角的坐标
   填充矩形:fillRect(x,y,width,height)
        (x,y):矩形左上角的坐标
   圆角矩形:drawRoundRect(x,y,width,height,arcWidth,arcHeight)(边框型)
        fillRoundRect(x,y,width,height,arcWidth,arcHeight)(填充型)
        (x,y):矩形左上角的坐标
        (arcWidth,arcHeight):圆角的横向直径和纵向直径
        arcWidth=arcHeight=width=height时:画圆
   立体矩形:draw3DRect(x,y,width,height,raised)(边框型)
        fill3DRect(x,y,width,height,raised)(填充型)
        raised:布尔型,表示具有凸出/凹进的效果(raised=true/false)
  画圆:
   椭圆:drawOval(x,y,width,height)(边框型)
      fillOval(x,y,width,height)(填充型)
   圆弧:drawArc(x,y,width,height,startAngle,arcAngle)(边框型)
      fillArc(x,y,width,height,startAngle,arcAngle)(填充型)
      startAngle:起始角度
      arcAngle:圆弧角度
  图形复制和清除:
   复制:copyArea(x,y,width,height,dx,dy)
      dx,dy:新区域相对原始区域的偏移
   清除:clearArea(x,y,width,height)
  显示图象:
   Image类:保存图象信息的数据结构。
   装载图象文件:Image myImage(baseURL,imageFile)
          myImage:创建的Image类对象
          baseURL:当前HTML文件所在目录的URL
          imageFile:图象文件标识(含相对路径)
   显示图象:drawImage(ImageObject,x,y,this)
  例3.5:随机彩色盒
   例3.6:显示图象文件

四、Applet中的交互机制:事件
 1.事件的概念
  事件表达了系统、Applet及用户之间的动作和响应。事件产生和处理的流程如下:

 2.事件类:Event
  定义了键常量,表示一个键被按下的事件。
  定义了事件常量,表示该事件的发生。
  定义了数据成员,存储有关事件对象的信息。
  定义了若干方法,能够用来得到事件的有关信息。
 3.通过handleEvent()方法实现事件的响应
  handleEvent()方法是Applet类从其父类Component类继承而来的。
  事件发生后,Applet将自动执行handleEvent()方法。
  handleEvent()方法:根据evt.id判断什么事件发生,
            转入相应的事件处理方法。
  Component类中定义的各事件处理方法,没有具体操作,必须在用户的Applet中重新定义。
  例3.5 响应mouseDown事件
Applet的运行过程:
   mouseDown事件发生后,系统生成事件对象evt,并送入用户的Applet,
   同时送入的有关信息:点击位置的坐标值x和y。
  例3.6 响应keyPress事件
   Applet的运行过程与上例类似。
   keyDown事件发生后,系统生成事件对象evt,并送入用户的Applet,
   同时送入的有关信息:所按键的ASCII码。
  练习3.3:同时响应鼠标和键盘事件

 4.通过事件监听器(event listeners)接收和处理事件
  事件监听器是一些接口,每一个针对若干事件。   接口中定义了响应事件的方法,
  这些方法必须在用户的Applet中重载(即重新定义)。
  使用事件监听器:
  Applet源文件开始处:import java.awt.event.*
  根据需要监听的事件类型选择合适的监听器,声明用户Applet:
   public class UserApplet extends Applet implements eventListner
  在用户Applet中重载处理事件的方法。
   例如:使用ActionListener时,需重载actionPerformed方法。
  例3.7 使用事件监听器
   使用事件监听器的情况下,用户点击按钮后,
   系统产生ActionEvent类的对象event,并送入用户Applet,
   用户Applet执行ActionPerformed()方法,对按钮事件进行处理。
五、独立实践:练习3.4
 按以下要求编写KeyString.java:
  (1)接收用户按下的字符键,并在(10,20)位置处连续显示。
  (2)并能处理退格键(提示:退格键的ASCII码是8)。(运行效果)