190 likes | 373 Views
第 11 章 Java Applet. 小应用程序. Java 小应用程序( Java Applet )继承 Applet 或 JApplet 类。. 独立应用程序 的概念. 独立应用程序 (Java Application) 是指从一个 Java 类的 main() 方法开始运行的程序。在这种运行模式中, Java 类的 .class 文件和 Java 虚拟机进程位于同一个台机器上. 小应用程序的概念.
E N D
小应用程序 Java小应用程序(Java Applet)继承Applet或JApplet类。
独立应用程序的概念 独立应用程序(Java Application)是指从一个Java类的main()方法开始运行的程序。在这种运行模式中,Java类的.class文件和Java虚拟机进程位于同一个台机器上
小应用程序的概念 • JApplet以及它的父类Applet与其他Java类的最大区别在于,它们可以在浏览器中运行。当浏览器访问Web服务器中的一个嵌入了Applet的网页时,这个Applet的.class文件会从Web服务器端下载到浏览器端,浏览器启动一个Java虚拟机来运行Applet。
Applet的书写格式 小应用程序的书写格式: import java.applet.*; public class MyApplet extends Applet{ … ; } 或 import javax.swing.*; public class MyJApplet extends JApplet{ … ; } 每个小应用都有一个主程序类,之前必须加上public。
Applet的常用方法 • 代表了Applet生命周期的主要活动内容的方法: init (),start(),stop(),destory() • 代表了Applet访问环境资源的方法 getDocumentBase(), getCodeBase() getImage(URL base, String target),getParameter()
Applet的运行控制 • Applet的生命周期 初始态 第一次装入,构造applet类,调用init()方法 调用start()方法 运行态 重新装入或改变页面大小或返回Web页面,调用start()方法 离开web页面:极小化或装入其他页面,调用stop()方法 停止态 关闭浏览器,调用destroy()方法 消亡态
Applet运行控制示例 public class SimpleApplet extends Applet { StringBuffer buffer; public void init() { buffer = new StringBuffer(); addItem("initializing... "); } public void start() { addItem("starting... "); } public void stop() { addItem("stopping... "); } public void destroy() { addItem("preparing for unloading(destroy)..."); } void addItem(String newWord) { System.out.println(newWord); buffer.append(newWord); repaint(); } public void paint(Graphics g) { g.drawRect(0, 0, getSize().width - 1, getSize().height - 1); g.drawString(buffer.toString(), 5, 15); } } SimpleApplet.java
Applet的运行 • Applet通常运行于一个Web浏览器中 • JDK附带有一个专为查看Applet而设计的工具appletviewer。它的运行命令为: Appletviewer [-debug] [-J<Javaflag>] [-encoding <character encoding type>] url |File 例如: 先进入SimpleApplet.html所在目录,再运行命令 appletviewer SimpleApplet.html
Applet举例 public class MyApplet extends Applet implements Runnable { String word; int fontSize; Thread changer; public void init() { word=getParameter("word"); fontSize=8; setSize(100,100); } public void start(){ changer=new Thread(this); changer.start(); } public void stop(){ changer.stop(); } public void paint(Graphics g) { g.setFont(new Font("newFont",Font.BOLD,fontSize)); g.drawString(word,30,80); } public void run(){ while(true){ fontSize+=4; repaint(); //The word will be redrawed with new fontSize try{ Thread.sleep(1000); }catch(Exception e){} if(fontSize>40) fontSize=8; } }//run() } 见MyApplet.java
HTML中的Applet标记 • 以IE浏览器为例,IE浏览器支持JDK1.0版本中的Applet,只要在网页中加入一个<applet>标记就能嵌入一个Applet. • 浏览器一遇到这个标记,就会下载相应的 Applet类文件,并启动Java虚拟机运行这个Applet。 <html> <applet code=MyApplet.class width=100 height=100> <param name=word value=hi> </applet> </html> 演示MyApplet.html
HTME中Applet标记的使用 < APPLET [ARCHIVE = archiveList ] [CODEBASE = codebaseURL] //表示要下载运行的小程序所在包的基路径,小程序中可用getCodeBase()方法获得该标记的值(可选标记) CODE = appletFile //小程序的包名.文件名 [ALT = alternateText] [NAME = appletInstanceName] WIDTH = pixels HEIGHT = pixels//小程序运行的窗口大小 [ALIGN = alignment] [VSPACE = pixels] [HSPACE = pixels] > [< PARAM NAME = appletParameter1 VALUE = value >] [< PARAM NAME = appletParameter2 VALUE = value >] //传入小程序的参数名和值,在小程序中可用getParameter(String name)获得名为name的参数值 . . . [alternateHTML] </APPLET> • HTML的标记和值不区分大小写
HTML文件中的Param标记 HTML文件中的Apple标记内的param标记用于向applet程序传递参数。 <html> <applet code=A.class width=100 height=100> <param name=Word value=hi> //与main()方法中的参数arg类似 <param name=longWord value=”hi all”> </applet> </html> • 以下是Applet的init方法: init(){ String s1=getParameter(“none”); //s1=null String s2=getParameter(“word”); //s2=“hi”,对参数名大小写不敏感 String s3=getParameter(“WORD”); //s3=“hi” System.out.println(s2==s3); //true String s4=getParameter(“longWord”); // s4=”hi all” }
读取HTML文件中的参数 • A.java文件的部分定义: package mypackage; public class A extends Applet{…;} • A.java文件编译时指定的基路径为D:\classes • 在路径D:下创建A.html文件如下 <html> <applet codebase=classes code=mypackage.A.class width=100 height=100> </applet> </html> 演示MyApplet1.html
将Applet加载到独立应用程序中 Applet是Panel的子类,可以把Applet放到JFrame中,然后通过独立应用程序显示。 public static void main( String args[] ) { JFrame f = new JFrame("Applet-App"); AppletApp app = new AppletApp(); f.add(app); f.setSize(200, 200); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); app.init(); app.start(); } public class AppletApp extends Applet { public String s; public void init() { s = new String(“Hello World!”); } public void paint(Graphics g) { g.drawString(s,25,25); } } AppletApp.java
JApplet与Applet的区别 不能直接向JApplet中加入组件,而必须首先获得它的内容面板,然后向内容面板中加入组件,内容面板默认的布局管理器为BorderLayout: Container contentPane=getContentPane(); contentPane.setBackground(Color.WHITE); contentPane.add(contrlButton, BorderLayout.NORTH);
JApplet举例 public class MyJApplet extends JApplet implements Runnable { String word; int fontSize; Thread changer; public void init() { word=getParameter("word"); fontSize=8; setSize(100,100); } public void start(){ changer=new Thread(this); changer.start(); } public void stop(){ changer.stop(); } public void paint(Graphics g) { super.paint(g); g.setFont(new Font("newFont",Font.BOLD,fontSize)); g.drawString(word,30,80); } public void run(){ while(true){ fontSize+=4; repaint(); //The word will be redrawed with new fontSize try{ Thread.sleep(1000); }catch(Exception e){} if(fontSize>40) fontSize=8; } }//run() }
在HTML中加入JApplet • IE浏览器无法运行Java2中的JApplet,在这种情况下,可以把JApplet作为一种插件来运行。在IE浏览器中,插件的标记为<object>,在Netscape浏览器中,插件的标记为<embed >。当浏览器遇到插件标记,就会启动相应的插件运行程序,通过该程序来运行特定的插件。 • JApplet作为一种插件时,它的插件运行程序为JRE程序(Java Runtime Enviroment,Java运行时环境)。 该程序的下载网址为: http://java.sun.com/j2se/1.5.0/download.jsp。 JRE程序的名字为: jre-1_5_0_06-windows-i586-p.exe。
在HTML中加入JApplet <object codebase = "http://java.sun.com/update/1.5.0/jinstall-1_5-windows-i586.cab#Version=1,5,0,0" WIDTH = 100 HEIGHT = 100 > <PARAM NAME = CODE VALUE =classes/MyJApplet.class > //表示MyJApplet.java文件中有package classes语句 <param name = "type" value = "application/x-java-applet;version=1.5"> <param name = "scriptable" value = "false"> <param name = “Word" value = "hi"> </object> //如果运行该HTML文件的机器上没有安装JRE,则从codebase指示的网页上下载 演示MyJApplet.html