在WWW中Java因其靈活性而得到越來越廣泛的運用,許多的網頁都使用了Java來增加動感和與用戶進行交互對話.在WWW中Java Script和Java Applet是運用最多的。Java Script的啟動速度快, 編寫簡單,易於修改,與文檔的結合密切,但其功能略嫌簡單; 而Java Applet的功能強大, 靈活性好,但編寫復雜,無法直接在文檔中修改.因此如能將二者結合運用將達到很好的效果.
下面我給大家舉例如何在網頁中進行Java Script和Java Applet的綜合運用.
首先我們編寫一個Java Applet,就叫HelloWorld1好了(大家對HelloWorld一定不會陌生).
HelloWorld1.java
import java.awt.*;
import java.applet.*;
public class HelloWorld1 extends Applet
{
public String text="Hello World!";//請注意此處的public
public void paint(Graphics g)
{g.drawString(text,20,20);}
}
編譯通過後會生成HelloWorld1.class(別告訴我程序無法通過!如果編譯出錯請檢查是否拼寫有誤。)
example.html
<html>
<head><title>例子</title></head>
<body>
<script language="JavaScript">
<!--
function SetText()
{
document.app.text="世界你好!";
document.app.repaint();//也請注意此句.
}
//-->
</script>
Java Script與Java Applet的綜合運用例一<br>
<applet code="HelloWorld1.class" width="100" height="28" name="app">
</applet>
<form>
<input type="button" value="請點擊這裡" onclick="SetText()">
</form>
</body>
</html>
用浏覽器打開example.html會出現一個顯示“Hello World!”的Java Applet以及一個按鈕“請點擊這裡”。我們點一下按鈕,你會發現“Hello World!”變成了“世界你好”。這說明Java Script已經成功的改變了HelloWorld1中text的內容。
你也許會問在在HelloWorld1.java中為什麼要在text前加public??
還有Java Script中那行:"document.app.repaint();"是什麼意思??
是這樣的:
和C++一樣,在Java中缺省狀態下,對象的屬性是private,要讓Java Script訪問到Java Applet中的對象,必須設置為public(包括函數、變量和類)。
前一句document.app.text="世界你好!"僅改變了text的值,要使它反映在浏覽器上,必須要讓HelloWorld1刷新它的顯示,因此要調用HelloWorld1中的repaint()函數。你也許又要問了:我在HelloWorld1.java中並沒有看到repaint()函數呀? HelloWorld1是Applet的子類,我們調用repaint()其實是調用類Applet中的repaint()函數。當然我們並不推薦在外部直接修改Applet內的變量,更安全的方法是提供public函數來讀取和改變內部變量。
上面我們介紹了使用Java Script改變Java Applet中的變量的方法(嚴格來講應該是改變了String類,不過可以簡單的把String類看成是變量); 我們說直接在Java Script中改變Java Applet中的變量是不可取的(至少是不推薦的)。 因為Java Applet本身並不知道變量被改變, 這會給Applet程序帶來隱患(還記得我們不得不調用repaint()函數來刷新顯示嗎?)。 更為積極的做法是在Java Applet中提供public函數支持對內部對象的存取。下面我們對HelloWorld1.java和example.html進行改進,介紹如何在Java Script中調用Java Applet的函數:
考慮到浏覽器對同名的Java Applet往往使用cache,因此我們把程序命名為HelloWorld2.java
HelloWorld2.java
import java.awt.*;
import java.applet.*;
public class HelloWorld2 extends Applet//主類名必須與文件名相同
{
String text="Hello World!";//去掉text的public屬性
public void paint(Graphics g)
{g.drawString(text,20,20);}
//這裡增加一個public函數
public void SetString(String NewString)
{
text=NewString;
repaint();//自動調用repaint()函數
}
}
編譯後生成HelloWorld2.class;
example2.html
<html>
<head><title>例子</title></head>
<body>
<script language="JavaScript">
<!--
function SetText()
{
document.app.SetString("世界你好!");
//這裡不再需要repaint()函數了
}
//-->
</script>
<applet code="HelloWorld2.class" width="100" height="28" name="app">
</applet>
<form>
<input type="button" value="請點擊這裡" onclick="SetText()">
</form>
</body>
</html>
同樣打開example2.html點擊按鈕後你會發現"Hello World!"變成了"世界你好!",說明調用函數成功?