Java咖啡馆:情人节的Applet(3)
发表时间:2024-02-05 来源:明辉站整理相关软件相关文章人气:
[摘要]OK,保存一下项目,然后可以点击Eclipse的Run菜单的Run as-Java Applet项来预览这个Applet了,是不是很简单?结合网页 把Applet嵌入网页很简单,只要一个<applet>标签即可。拿我们的NewsApplet类举例,在Eclipse项目的根目录中新建一...
OK,保存一下项目,然后可以点击Eclipse的Run菜单的Run as-Java Applet项来预览这个Applet了,是不是很简单?
结合网页
把Applet嵌入网页很简单,只要一个<applet>标签即可。拿我们的NewsApplet类举例,在Eclipse项目的根目录中新建一个sample.htm,源代码如下:
<html>
<body>
<applet code="NewsApplet.class" codebase="." width=480 height=384>
<param name="from" value="Prince Charming">
<param name="to" value="Cinderella">
</applet>
</body>
</html>
其中<applet>标签表示这里定义一个Applet,它对应的文件名是NewsApplet.class,它的相对路径是当前目录。<applet>标签中有两个<param>标签,这就是上文提到过的传递给Applet的参数。
Just Do It
如果现在用浏览器打开这个sample.htm将会得到什么结果?验证你的猜测。
除了用浏览器观察Applet,J2SE SDK提供的小工具appletviewer也非常好用。打开Windows的“命令提示符”,进入sample.htm所在的目录,然后输入:appletviewer sample.htm,来亲自体验一下appletviewer吧。
与JavaScript交互
JavaScript应该是大家非常熟悉的客户端脚本语言。虽然名字中带有Java,但它和Java语言只是在语法上有类似之处,JavaScript是由浏览器解释运行,与Applet由Java虚拟机执行完全不一样。不过,这两个没有血缘关系的同班同学倒是可以精诚合作,Applet实现底层的工作,JavaScript执行更高层的调用,从而实现意想不到的效果。
JavaScript可以通过多种途径操纵Applet。首先,JavaScript能调用Applet中的public的方法,这时的Applet好像一个听话的机器人一样好用。另外一种方法就是用JavaScript直接修改HTML结构,这样可以定制Applet的各种属性,有更大的灵活性。
刚才说了,我们的目标是把这个Applet制作成一种服务,即使不懂编程的朋友通过设置网页的参数就能够使用,因为不是每个人都有能力(或者精力)修改源代码的。所以,需要把Applet的参数做成可定制的,而这个只能够由JavaScript完成。虽然我们可以给Applet写一些类似于setFrom()和setTo()的方法给JavaScript调用,但是问题在于JavaScript函数的执行时机,因为Applet无法通知JavaScript它已经完成初始化操作了。
所以,我们应该走第二条路,即用JavaScript直接修改HTML结构,动态把<applet>标签写入HTML。从而,我们最终版本的index.htm代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>大千世界无奇不有</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<script language="JavaScript">
// 得到URL中的参数
var urlquery = location.href.split("?");
if (urlquery.length > 1) {
// 解析参数并获取from和to
var urlterms = urlquery[1].split("&");
var from = decodeURIComponent(urlterms[0].substring(5));
var to = decodeURIComponent(urlterms[1].substring(3));
// 动态把<applet>标签写入HTML
document.write('<center>');
document.write('<h1>爱琴海上千年罕见的奇观</h1>');
document.write('</center>');
document.write('<hr>');
document.write('<p align=center>http://www.cfan.com.cn 2005年2月14日 记者:GaryChan</p>');
document.write('<applet code="NewsApplet.class" codebase="." width=480 height=384>');
document.write(' <param name="from" value="' + from + '">');
document.write(' <param name="to" value="' + to + '">');
document.write('</applet>');
document.write('<p>酷似汉字的星辰若隐若现&?lt;/p>');
document.write('<img src="http://edu.chinaz.com/Get/Program/Program_Other/crowd.jpg">');
document.write('<p>世界各地人们蜂拥而来争相观赏</p>');
document.write('<p>科学家表示,白天能够达到肉眼辨别的星辰非常罕见。<p>');
document.write('<p>据称,如果名字跟星辰相似,一定能够得到神灵的祝福。<p>');
}
</script>
<form>
<p>你的名字:
<input name="from" type="text" id="from" width="100">
她的名字:<input name="to" type="text" id="to" width="100">
<input type="submit" name="Submit" value="提交">
</p>
</form>
</body>
</html>