Java咖啡館:情人節(jié)的Applet(3)
發(fā)表時間:2024-02-05 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]OK,保存一下項目,然后可以點擊Eclipse的Run菜單的Run as-Java Applet項來預(yù)覽這個Applet了,是不是很簡單?結(jié)合網(wǎng)頁 把Applet嵌入網(wǎng)頁很簡單,只要一個<applet>標(biāo)簽即可。拿我們的NewsApplet類舉例,在Eclipse項目的根目錄中新建一...
OK,保存一下項目,然后可以點擊Eclipse的Run菜單的Run as-Java Applet項來預(yù)覽這個Applet了,是不是很簡單?
結(jié)合網(wǎng)頁
把Applet嵌入網(wǎng)頁很簡單,只要一個<applet>標(biāo)簽即可。拿我們的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>標(biāo)簽表示這里定義一個Applet,它對應(yīng)的文件名是NewsApplet.class,它的相對路徑是當(dāng)前目錄。<applet>標(biāo)簽中有兩個<param>標(biāo)簽,這就是上文提到過的傳遞給Applet的參數(shù)。
Just Do It
如果現(xiàn)在用瀏覽器打開這個sample.htm將會得到什么結(jié)果?驗證你的猜測。
除了用瀏覽器觀察Applet,J2SE SDK提供的小工具appletviewer也非常好用。打開Windows的“命令提示符”,進(jìn)入sample.htm所在的目錄,然后輸入:appletviewer sample.htm,來親自體驗一下appletviewer吧。
與JavaScript交互
JavaScript應(yīng)該是大家非常熟悉的客戶端腳本語言。雖然名字中帶有Java,但它和Java語言只是在語法上有類似之處,JavaScript是由瀏覽器解釋運行,與Applet由Java虛擬機(jī)執(zhí)行完全不一樣。不過,這兩個沒有血緣關(guān)系的同班同學(xué)倒是可以精誠合作,Applet實現(xiàn)底層的工作,JavaScript執(zhí)行更高層的調(diào)用,從而實現(xiàn)意想不到的效果。
JavaScript可以通過多種途徑操縱Applet。首先,JavaScript能調(diào)用Applet中的public的方法,這時的Applet好像一個聽話的機(jī)器人一樣好用。另外一種方法就是用JavaScript直接修改HTML結(jié)構(gòu),這樣可以定制Applet的各種屬性,有更大的靈活性。
剛才說了,我們的目標(biāo)是把這個Applet制作成一種服務(wù),即使不懂編程的朋友通過設(shè)置網(wǎng)頁的參數(shù)就能夠使用,因為不是每個人都有能力(或者精力)修改源代碼的。所以,需要把Applet的參數(shù)做成可定制的,而這個只能夠由JavaScript完成。雖然我們可以給Applet寫一些類似于setFrom()和setTo()的方法給JavaScript調(diào)用,但是問題在于JavaScript函數(shù)的執(zhí)行時機(jī),因為Applet無法通知JavaScript它已經(jīng)完成初始化操作了。
所以,我們應(yīng)該走第二條路,即用JavaScript直接修改HTML結(jié)構(gòu),動態(tài)把<applet>標(biāo)簽寫入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中的參數(shù)
var urlquery = location.href.split("?");
if (urlquery.length > 1) {
// 解析參數(shù)并獲取from和to
var urlterms = urlquery[1].split("&");
var from = decodeURIComponent(urlterms[0].substring(5));
var to = decodeURIComponent(urlterms[1].substring(3));
// 動態(tài)把<applet>標(biāo)簽寫入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>酷似漢字的星辰若隱若現(xiàn)&?lt;/p>');
document.write('<img src="http://edu.chinaz.com/Get/Program/Program_Other/crowd.jpg">');
document.write('<p>世界各地人們蜂擁而來爭相觀賞</p>');
document.write('<p>科學(xué)家表示,白天能夠達(dá)到肉眼辨別的星辰非常罕見。<p>');
document.write('<p>據(jù)稱,如果名字跟星辰相似,一定能夠得到神靈的祝福。<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>