v Applet v AppletApplication v Applet v AppletAWT

  • Slides: 76
Download presentation

教学重点与难点 v Applet的 作原理 v Applet与Application的区别 v Applet的创建与执行 v Applet的AWT绘制 v Applet的通信 v Applet的应用

教学重点与难点 v Applet的 作原理 v Applet与Application的区别 v Applet的创建与执行 v Applet的AWT绘制 v Applet的通信 v Applet的应用

v 【例8. 1】一个简单HTML文件(文件的扩展名为. html或. htm)。 (HTML文件是文本文件,可用任一文本文件编辑器进行编辑, HTML语言标记名不区分大小写) <HTML> <HEAD> <TITLE>Java HTML Test</TITLE> </HEAD> <BODY>

v 【例8. 1】一个简单HTML文件(文件的扩展名为. html或. htm)。 (HTML文件是文本文件,可用任一文本文件编辑器进行编辑, HTML语言标记名不区分大小写) <HTML> <HEAD> <TITLE>Java HTML Test</TITLE> </HEAD> <BODY> <CENTER> <FONT SIZE="4" COLOR="RED"> This is a HTML Test. </FONT> <HR WIDTH="200"><P> <A HREF="APPLET. HTM"><I>Java Applet</I></A><P> <A HREF="APPLICATION. HTM"> <I> Java Application</I></A><P> <HR WIDTH="200"></CENTER> </BODY></HTML>

v 8. 1. 3 HTML文件中嵌入Applet v 在一个Applet标记单元中,有如下的标记内容。 < APPLET [CODEBASE = codebase. URL] CODE

v 8. 1. 3 HTML文件中嵌入Applet v 在一个Applet标记单元中,有如下的标记内容。 < APPLET [CODEBASE = codebase. URL] CODE = Applet. File [ALT = alternate. Text] [NAME = Applet. Instance. Name] WIDTH = pixels HEIGHT = pixels [ALIGN =alignment] [VSPACE = pixels] [HSPACE = pixels] > < PARAM NAME = Applet. Attribute VALUE =value> . . . alternate. HTML </APPLET>

v v v (4) NAME = Applet. Instance. Name 指出Applet实例的名称,多用于在多个Applet的通信中做标识 符。 (5) WIDTH =

v v v (4) NAME = Applet. Instance. Name 指出Applet实例的名称,多用于在多个Applet的通信中做标识 符。 (5) WIDTH = pixels和HEIGHT = pixels 指定Applet显示区域的大小,单位为像素点数。例如: WIDTH = 200 HEIGHT = 150 (6) ALIGN =alignment 设置Applet在页面上的排列对齐方式,有LEFT、RIGHT、CENTER、 TOP、 TEXTTOP、 MIDDLE、 ABSMIDDLE、 BASELINE、 BOTTON、 ABSBOTTON等多种。例如: ALIGN = CENTER

v v v (7) VSPACE = pixels和HSPACE = pixels 设置Applet与周围文本之间的间距,单位是像素点数。例如: VSPACE = 15 HSPACE

v v v (7) VSPACE = pixels和HSPACE = pixels 设置Applet与周围文本之间的间距,单位是像素点数。例如: VSPACE = 15 HSPACE = 15 (8) PARAM NAME = Applet. Attribute VALUE =value 从外界获取参数。PARAM的属性包括NAME和VALUE两个,其中 NAME给出参数名,VALUE给出参数值。一个Applet单元可以包含 多个PARAM单元。 (9) alternate. HTML 标识的文字在不支持Applet标记的浏览器中显示,代替Applet。 例如,要把一个名为myapplet. class的字节码文件嵌入HTML文 件中,可以采用如下格式: <Applet CODE = myapplet. class WIDTH = 200 HEIGHT = 50></Applet>

2. Applet的框架结构 v Applet的一般结构框架形式如下: v import java. awt. *; import java. applet. *; public

2. Applet的框架结构 v Applet的一般结构框架形式如下: v import java. awt. *; import java. applet. *; public class 小程序� 名 extends Applet { public void init() {// 初始化、� 置字体、装�� 片等 } public void start() {// 启� 或恢复� 行 } public void stop() {// � 行被挂起 } public void destroy() {// � 行关� 活� } public void paint(Graphics g) {// � 行�� 操作等 } }

8. 2. 4 Applet和Application v 由于程序结构不同的原因,在前面的讨论中,Java小 程序Applet和Java应用程序Application是分别介绍的, 实际上,可以编写出既可作为小程序,又可作为应用 程序的Java程序,这样的程序可以独立地在操作系统 下运行,又可在浏览器中运行。 例 8. 3】 既

8. 2. 4 Applet和Application v 由于程序结构不同的原因,在前面的讨论中,Java小 程序Applet和Java应用程序Application是分别介绍的, 实际上,可以编写出既可作为小程序,又可作为应用 程序的Java程序,这样的程序可以独立地在操作系统 下运行,又可在浏览器中运行。 例 8. 3】 既 可 作 为 Applet, 又 可 作 为 Application运行的程序。 v【 import javax. swing. *; import java. awt. *; import java. applet. Applet; import java. awt. event. *; public class App 2 extends Applet{ public static void main(String args[]){

 JFrame frame=new JFrame("Application"); App 2 app = new App 2(); frame. get. Content.

JFrame frame=new JFrame("Application"); App 2 app = new App 2(); frame. get. Content. Pane(). add( app, Border. Layout. CENTER); frame. set. Size(150, 100); frame. set. Visible(true); frame. add. Window. Listener(new Window. Control(app)); app. init(); app. start(); } public void paint(Graphics g){ } g. draw. String("Hello, World!", 25); g. draw. Rect(20, 10, 80, 20);

public void destroy(){ System. exit(0); } } class Window. Control extends Window. Adapter{ Applet

public void destroy(){ System. exit(0); } } class Window. Control extends Window. Adapter{ Applet c; public Window. Control(Applet c){ this. c=c; } public void Window. Control(Window. Event e){ c. destroy(); } }

v 【例8. 4】Applet运行时从HTML文件的Applet单元获 取参数,参数及其相应的值见程序中的注释部分。 /* <Applet code="Param. Demo" width=300 height=80> <param name=font. Name value=Courier>

v 【例8. 4】Applet运行时从HTML文件的Applet单元获 取参数,参数及其相应的值见程序中的注释部分。 /* <Applet code="Param. Demo" width=300 height=80> <param name=font. Name value=Courier> <param name=font. Size value=14> <param name=leading value=2> <param name=account. Enabled value=true> </Applet> */ import java. awt. *; import javax. swing. *; public class Param. Demo extends JApplet{ String font. Name; int font. Size;

 float leading; boolean active; public void start() { String param; font. Name =

float leading; boolean active; public void start() { String param; font. Name = get. Parameter("font. Name"); if(font. Name == null)font. Name = "Not Found"; param = get. Parameter("font. Size"); try { if(param != null) // 如果未找到 font. Size = Integer. parse. Int(param); else font. Size = 0; } catch(Number. Format. Exception e) { font. Size = -1; }

 param = get. Parameter("leading"); try { if(param != null) // 如果未找到 } leading

param = get. Parameter("leading"); try { if(param != null) // 如果未找到 } leading = Float. value. Of(param). float. Value(); else leading = 0; catch(Number. Format. Exception e) { leading = -1; } param = get. Parameter("account. Enabled"); if(param != null) active = Boolean. value. Of(param). boolean. Value(); } public void paint(Graphics g) { // � 示参数 g. draw. String("Font name: " + font. Name, 10, 20);

g. draw. String("Font size: " + font. Size, 10, 35); g. draw. String("Leading: "

g. draw. String("Font size: " + font. Size, 10, 35); g. draw. String("Leading: " + leading, 10, 50); g. draw. String("Account Active: " + active, 10, 65); } } v 由于get. Parameter()方法返回字符串,若希望得到数值 参数,则需要进行类型转换。程序运行结果如下图所示。

v 【例8. 5】字体设置和显示效果。 import javax. swing. JApplet; import java. awt. *; public class Font.

v 【例8. 5】字体设置和显示效果。 import javax. swing. JApplet; import java. awt. *; public class Font. Demo extends JApplet { public void paint(Graphics g) { int baseline = 60; // 设置写字的基线 g. set. Color(Color. black); // 设置写字的颜色为黑色 g. draw. Line(0, baseline, 200, baseline); // 绘出基线 g. set. Font(new Font("Serif", Font. BOLD+Font. ITALIC, 36)); g. draw. String("中国Wxyz", 10, baseline); // 输出字符串 } }

v 颜色常量 Color. black 颜色 RGB值 黑色 0, 0, 0 Color. blue 蓝色 0,

v 颜色常量 Color. black 颜色 RGB值 黑色 0, 0, 0 Color. blue 蓝色 0, 0, 255 Color. green 绿色 0, 255, 0 Color. cyan 蓝绿色(青色) Color. dark. Gray 深灰色 Color. gray 灰色 128, 128 Color. light. Gray 浅灰色 Color. red 红色 255, 0, 0 0, 255 64, 64 192, 192

 Color. magenta 洋红色 Color. pink 255, 175 Color. orange Color. yellow Color. white

Color. magenta 洋红色 Color. pink 255, 175 Color. orange Color. yellow Color. white 255, 0, 255 粉红色 橙色 黄色 255, 200, 0 255, 0 白色

v v v 设g是一个Graphics的对象,设置g当前颜色为红色的方法可 以为下列方法之一。 g. set. Color(Color. red); // 使用Color常量 g. set. Color(new

v v v 设g是一个Graphics的对象,设置g当前颜色为红色的方法可 以为下列方法之一。 g. set. Color(Color. red); // 使用Color常量 g. set. Color(new Color(255, 0, 0)); // 使用Color对象 对于GUI的组件,可用与颜色有关的下列方法分别设置和获 取组件的背景色和前景色: public void set. Background(Color c); public Color get. Background(); public void set. Foreground(Color c); public Color get. Foreground(); 若需要颜色的分量值,可用Graphics类的方法get. Color()或 Color类的如下方法: public int get. Red(); public int get. Green(); public int get. Blue();

v 【例8. 6】绘制有颜色的字符串。 import javax. swing. JApplet; import java. awt. *; public class Color.

v 【例8. 6】绘制有颜色的字符串。 import javax. swing. JApplet; import java. awt. *; public class Color. String extends JApplet{ private int red, green, blue; private float rf, gf, bf; private int ci; String str; public void init(){ red = 200; green = 20; blue = 200; rf = 0. 6 f; gf = 0. 4 f; bf = 0. 2 f; ci = 0 x 00 ff 0000; // 设置为红色 str = "Hello, Java Programmer. "; }

public void paint(Graphics g){ Color c = new Color(red, green, blue); g. set. Color(c);

public void paint(Graphics g){ Color c = new Color(red, green, blue); g. set. Color(c); g. draw. String(str, 30); show. Status("当 前 颜 色 : " + g. get. Color()); g. set. Color(new Color(rf, gf, bf)); g. draw. String(str, 30, 50); g. set. Color(new Color(ci)); g. draw. String(str, 30, 70); } }

 public void draw. Chars(char[] data, int offset, int length, int x, int y)在基线(x,

public void draw. Chars(char[] data, int offset, int length, int x, int y)在基线(x, y)坐标处写开始偏移为 offset、长度length的字符数组data内容。 public void draw. Bytes(byte[] data, int offset, int length, int x, int y)在基线(x, y)坐标处写开始偏移为 offset、长度length的字节数组data内容。 2. 画直线 draw. Line(x 1, y 1, x 2, y 2)从点(x 1, y 1)到(x 2, y 2)画一条直线。 3. 画矩形 draw. Rect(x, y, width, height)以( x, y)为 原点 , 即矩 形 的左上角,画宽为width,高为height的矩形。 fill. Rect(x, y, width, height)画实心的矩形,参数同上。

 fill. Oval(x, y, width, height)画实心的椭圆,参数同上。 5. 画圆弧 public abstract void draw. Arc(int x,

fill. Oval(x, y, width, height)画实心的椭圆,参数同上。 5. 画圆弧 public abstract void draw. Arc(int x, int y, int width, int height, int start. Angle, int arc. Angle)考虑 以(x, y)为原点,宽为width,高为height的矩形内切椭 圆。画它上面从start. Angle角度开始,掠过sweep. Angle 角度的线段。 fill. Arc(x, y, width, height, start. Angle, arc. Angle)实心, 参数同上。 6. 画多边形 public abstract void draw. Polygon(int[] x. Points, int[] y. Points, int n. Points) x. Point和y. Point 是两个数组,分别定义多边形顶点的x坐标和y坐标。 n. Point为顶点个数。

 fill. Polygon(x. Point, y. Point, n. Point)实心的,参数同上。 v 7. 限定作图区域 public abstract void

fill. Polygon(x. Point, y. Point, n. Point)实心的,参数同上。 v 7. 限定作图区域 public abstract void clip. Rect(int x, int y, int width, int height)这四个参数划定了一个矩形区,使得 所有的绘图操作只能在这个矩形区域内起作用。超出范围 则无效。 v 【例8. 7】绘制各种图形。 import java. awt. *; import javax. swing. JApplet; public class Draw. Figures extends JApplet{ public void paint(Graphics g){ g. draw. Line(30, 5, 40, 150); g. draw. Rect(40, 10, 50, 20);

 } g. fill. Rect(60, 30, 70, 40); g. draw. Round. Rect(110, 130, 50,

} g. fill. Rect(60, 30, 70, 40); g. draw. Round. Rect(110, 130, 50, 30); g. draw. Oval(150, 120, 70, 40); g. fill. Oval(190, 160, 50, 40); g. draw. Oval(90, 100, 50, 40); g. fill. Oval(130, 100, 50, 40); draw. My. Polygon(g); g. draw. String( "这些图形由Graphics类的方法绘出。", 40, 220); } public void draw. My. Polygon(Graphics g){ int x[] = { 30, 50, 65, 110, 120}; int y[] = { 100, 140, 120, 170, 200}; g. draw. Polygon(x, y, 5); }

 public class Get. Applet. Demo extends JApplet{ JApplet ap ; public void paint(Graphics

public class Get. Applet. Demo extends JApplet{ JApplet ap ; public void paint(Graphics g){ ap = (JApplet)get. Applet. Context(). get. Applet ("绘图"); g. draw. String("--"+ ap. get. Class(). get. Name(), 30); } } v 为运行这个Applet,编写一个HTML文件如下: <Html><Body> <Applet code=Get. Applet. Demo width=400 height=400> </Applet></Body>

v 【 例 8. 9】 使 用 get. Applets()方 法 获 取 同 页

v 【 例 8. 9】 使 用 get. Applets()方 法 获 取 同 页 所 有 Applet信息,显示获得的Applet类名。 import java. awt. *; import javax. swing. *; import java. util. Enumeration; public class Get. Applets. Demo extends Japplet { JApplet ap; public void paint(Graphics g){ int i = 0; Enumeration e = get. Applet. Context(). get. Applets(); while(e. has. More. Elements()){ ap= (JApplet)e. next. Element(); i = i + 20; g. draw. String("--"+ap. get. Class(). get. Name(), 30, i); } } }

 public String[][] get. Parameter. Info()返 回 本 Applet参数的信息,返回值为字符串数组,它的每个 元素是包含三个字符串的一维数组,三个字符串分别 为名称、类型和描述。 public String get.

public String[][] get. Parameter. Info()返 回 本 Applet参数的信息,返回值为字符串数组,它的每个 元素是包含三个字符串的一维数组,三个字符串分别 为名称、类型和描述。 public String get. Applet. Info()返回本Applet的作者、 版本、版权等信息。 v 【 例 8. 10】 使 用 get. Code. Base()和 get. Document. Base()方 法 来 获 得 Applet程 序 所 在 路径和HTML文档名。 import java. awt. *; import java. applet. *; import java. net. *; public class Bases extends Applet{ public void paint(Graphics g) { String msg;

 URL url = get. Code. Base(); msg = "Code base: " + url.

URL url = get. Code. Base(); msg = "Code base: " + url. to. String(); g. draw. String(msg, 10, 20); url = get. Document. Base(); msg = "Document base: " + url. to. String(); g. draw. String(msg, 10, 40); } } v 程序运行结果如下图所示。

2. Inet. Address类 v 有时需要知道本机的IP地址或连接的对方计算机的IP地址,可 使用Java语言的Inet. Address类。 java. net. Inet. Address类继 承于Object类,可用于描述一个IP地址。常用的方法有: public static

2. Inet. Address类 v 有时需要知道本机的IP地址或连接的对方计算机的IP地址,可 使用Java语言的Inet. Address类。 java. net. Inet. Address类继 承于Object类,可用于描述一个IP地址。常用的方法有: public static Inet. Address get. By. Name(String host)throws Unknown. Host. Exception确定所给主机名的主机 IP地址。 public static Inet. Address get. Local. Host()throws Unknown. Host. Exception返回本地主机和IP地址。 v 【例8. 11】获得本机主机名和IP地址(本例是拨号上 网的结果)。 import javax. swing. *; v import java. net. *; v import java. awt. *; v

v v v v import java. awt. event. *; public class Local. Host extends

v v v v import java. awt. event. *; public class Local. Host extends JApplet{ Inet. Address Host. Addr = null; public void start(){ try{ Host. Addr = Inet. Address. get. Local. Host(); } catch(Unknown. Host. Exception e){ System. err. println(e. get. Message()); } repaint(); } public void paint(Graphics g){ g. draw. String("Host name / ip = " + Host. Addr. to. String(), 10, 30); } }