javascript|技巧
在WWW中Java因其靈活性而得到越來越廣泛的運用,許多的網頁都使用了Java來增加動感和與使用者進行互動對話.在WWW中Java Script和Java Applet是運用最多的。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="請點擊這裡" > </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的綜合運用(二)
上次我們介紹了使用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> Java Script與Java Applet的綜合運用例二<br> <applet code="HelloWorld2.class" width="100" height="28" name="app"> </applet> <form> <input type="button" value="請點擊這裡" > </form> </body> </html> |
同樣開啟example2.html點擊按鈕後你會發現"Hello World!"變成了"世界你好!",說明調用函數成功