开发功能和JIgloo的AWT/Swing/SWT开发能力。而Eclipse号称开源免费这么久了,真是没想到竟没有一个好使的免费界面设计器(Jigloo不能用于商业),只能说是利益使然了。
18.2 Applet开发
本节讨论Applet的基本开发,即以手工编码的方式进行开发,在18.2之后的章节介绍可视化开发。
18.2.1 Applet的HelloWorld开发
首先让我们新建一个Java项目:AppletTest,接着选择新建类文件applets. MyApplet,其代码清单如下:
MyApplet.java
package applets;
import java.awt.Color; import java.awt.Graphics; import java.awt.Image;
public class MyApplet extends java.applet.Applet {
public void paint(Graphics g) { g.setColor(Color.green);
g.fill3DRect(0, 0, getWidth() - 1, getHeight() - 1, true);
g.setColor(Color.decode(\)); g.drawString(\!\, 20, 20);
g.setColor(new Color(200, 20, 155)); g.drawString(\你好,自定义颜色!\, 20, 40);
Image img = getImage(this.getClass().getResource(\));
g.drawImage(img, 20, 60, this); } }
。这段代码定义了一个Applet,并覆盖了Applet的绘图方法paint(Graphics g),这个方法是由Applet的解释器调用的,传递的参数是一个图形对象。图形对象就是Java中作图的原始对象,可以画点,线,多边形,椭圆,文字,还可以画已经存在的图片。这段代码所执行的操作就是:设置画笔颜色为绿色,在坐标为(0,0)的点开始,以Applet自身显示的高度减1为3D的矩形高,Applet自身宽度减1为3D的矩形宽,填充绘制一个突起的3D矩形(g.fill3DRect()方法的最后一个参数即使突起或者凹陷,取值为boolean);随后从颜色字符串0x0000ff解析出Java中的颜色对象――蓝色,并在坐标为(20,20)的点开始绘
6
刘长炯著
制一个字符串Hello Applet!;接下来则使用RGB格式(物理上讲的,颜色的三原色,红绿蓝,每个的取值为0到255)定义了画笔的颜色为红200,20,155,并在坐标为(20,40)
自定义颜色!;随后使用Applet自带的getImage(URL)方法,的点开始绘制一个字符串你好,从相对路径读取了一张文件名为usb.jpg的图片(只支持格式jpg,gif和png),并在坐标为(20,60)的点绘制了这个图片,最后一个参数叫做ImageObserver,图片检测器,即applet自身,用来探测当图片加载完的时候才会绘制这张图。 这就是早期Applet的主要用法,即自己画图做动画,再加上播放声音,当时最大的用处就是做一些Applet的小游戏,例如俄罗斯方块等等,甚至还有公司做了很棒的游戏,例如有一次在EA看到了Applet版本的在线红警。
接下来我们来运行这个例子,选择菜单Run > Run As > 1 Java Applet,即可在Eclipse中启动并运行此页面,弹出的窗口和运行界面如图18.2所示。
图18.3 运行中的Applet
18.2.2 Applet的运行方式
那么这个Applet是怎么样运行的呢?让我们使用专业进程管理器看看运行时的命令行:D:\\Java\\MyEclipse6.0\\jre\\bin\\javaw.exe -Djava.security.policy=java.policy.applet
-classpath E:\\workspace\\AppletTest\\bin sun.applet.AppletViewer applets.MyApplet1210070089093.html,当前工作目录是E:\\workspace\\AppletTest\\bin\\,很好,去看看,原来运行时候莫名其妙多了两个文件java.policy.applet和applets.MyApplet1210070089093.html,文件内容分别是: applets.MyApplet1210070089093.html
java.policy.applet
/* AUTOMATICALLY GENERATED ON Tue Apr 16 17:20:59 EDT 2002*/
7
刘长炯著
/* DO NOT EDIT */
grant {
permission java.security.AllPermission; };
第二个文件是关系到Java的安全设置,有兴趣的读者可以查找Java的Policy(策略文件)相关的内容。第一个文件比较重要,因为Applet是在浏览器里运行的,前提是用HTML的APPLET标签将它嵌入页面中,就像在页面中嵌入Flash动画或者图片那样,必选的参数包括:code,它指定了Applet的类名,注意写法为包名.类名.class;另外两个参数width和height制定了Applet的面板在浏览器中占用的面积,即高度乘以宽度。那么,Applet的标准运行方式,就是嵌入到网页中使用,使用浏览器打开。此浏览器需要安装Java插件(Plug-in),才能正确的加载其中的类文件并执行。此时必须安装了JRE(可以从http://java.com/zh_CN/)下载或者检查是否安装好了JRE,另外安装完整版的JDK的时候,一般也有选择是否安装JRE选项。
OK,让我们总结一下普通用户运行Applet的必要前提: 1. 安装了JRE;
2. 安装了支持Java插件的浏览器(包括IE,Firefox,Mozilla,Opera等几乎所有主流浏
览器);
3. 正确开发和发布了Applet(一般来说网页文件和类文件位于同一个目录下)。
现在让我们试一试,在src目录下新建MyApplet.html,代码清单如下:
。然后打开项目所在的目录的类文件输出目录(例如/bin或者/classes),双击MyApplet.html在浏览器中打开,应该能够看到如下的界面:
8
刘长炯著
图18.4 浏览器中运行的Applet
此时还会显示一个名为Java控制台的窗口,在这个窗口按下键c,可以清除日志信息,按下x,然后刷新页面,可以重新载入Java类文件(这在调试Applet的时候很有用,因为浏览器默认是缓存当前显示的Applet的,不会每次都加载最新的类文件),其它的功能,大家按照说明按下键盘上的提示就可以了。如果没有看到这个界面,多半您没有安装JRE。 接着,我们看下Applet标签的相对完整的说明: 必需的属性 属性
值
描述
height pixels 定义 applet 的高度 width pixels 定义 applet 的宽度 code URL 执行 applet 的 class 的 URL可选的属性 属性 align
? ? ? ? ? ? ? ? ?
值 描述
定义围绕 applet 的文本排列方式。 left
right top bottom middle baseline texttop absmiddle absbottom
假如浏览器支持 applet,但无法运行此 applet 时,被显示的替换文本。
刘长炯著
alt text
9
archive URL
当 applet 被存储在某个 JAVA 档案文件或 ZIP 文件中时,此 applet 的 URL。
允许Applet和浏览器的JavaScript交互。
指示 applet 的基准 URL,假如 code 属性是相对的。 定义围绕 applet 的水平间隔。
定义针对 applet 的唯一名称(用在脚本中的)。 定义了包含该 applet 的一系列版本的资源名称。 在工具提示中显示的附加信息。 定义围绕 applet 的垂直间隔。
mayscript 无 codebase URL hspace name object title vspace
pixels unique_name name text pixels
。OK, archive是个很有用的功能,它可以将开发的类库打包成一个或者多个jar或者zip
文件(如何创建JAR我们此前已经讨论过),并以逗号隔开(注意是英文半角的),例如: