摘要 由於Java語言之中有多執行緒的功能,使得製作一個圖 文並茂而且生動活潑的全球資訊網頁面變得非常簡易。 本文利用幾個程式的實例來說明如何 製作這種自動自發的 HomePage。
由於 Java 有了這個多執行緒的功能,要用 Java 來開發一個動態的全球資訊網的 頁面,就變得非常簡單了。下面的這個實例中,只用了三十多行程式碼就可以作出 一個會動的標示板。
01 /* Display Text Applet by: Symon Chang 02 03*/ 05 import java.applet.*; 06 import java.awt.Graphics; 07 import java.awt.Font; 08 public class DispText extends Applet implements Runnable { 09 int x = 100; // 字的X座標 10 Thread myThread = null; // 宣告一個執行緒 11 String message = "《網路劇坊─小台哥笑談網路實作與管理》"; 12 public void init() { 13 setFont(new Font("TimesRoman",Font.BOLD,24)); 14 myThread = new Thread(this); // 設定這個執行緒 15 } 16 public void start() { 17 myThread.start(); // 啟動我的執行緒 18 } 19 public void run() { 20 while (true) { // 跑個沒完 21 repaint(); // 呼叫繪圖方法 22 x -= 10; // 改變字的X座標 23 try { Thread.sleep(500); } // 小睡片刻 24 catch(Exception e) {} // 錯了也不管 25 } 26 } 27 public void stop() { 28 myThread.stop(); // 停止我的執行緒 29 } 30 public void paint(Graphics g) { // 繪圖方法 31 int width = size().width; // 寬度 32 if ((x < 0) || (x > width)) x = width; // 重來 33 g.drawString(message, x, 40); // 畫字串 34 } 35 } //
請按我的電腦遊戲
利用上面這個相同的程式架構,加上一個在抽象視窗工具箱(AWT)之中的按鍵元 件,同一個標示板 Applet 就可以變成一個互動式的簡單電腦遊戲了。這個按鍵遊 戲的 Applet 執行結果如下:
同一個標示板的 Applet ,我們只要略加修改它的文字,並且加上一些填畫弧形圓 的程式碼,就可以變成一個招財進寶的 Applet 了。
招財進寶的 Applet
避免閃爍的招財進寶 Applet
/*
招財進寶的 Applet @author: Symon Chang E-mail: symonchang@earthlink.net URL: http://home.earthlink.net/~symonchang copyright(c) 1996 Symon Chang, Symon & Associates */ import java.applet.*; import java.awt.*; public class GoodLuck extends Applet implements Runnable { int x , a = 0; Thread myThread = null; // 宣告一個執行緒 boolean threadSuspended = false; Color someColors[] = new Color[50]; // 顏色矩陣 String message[] = {"招 財 進 寶", "Writting by Symon Chang", "Good Luck"}; int iColor =0, iMessage = 0; String myFont = "TimesRoman"; int fontSize = 30; public void init() { String sParameter; // 參數用 sParameter = getParameter("FONT"); // 讀入參數 if (sParameter != null) myFont = sParameter; sParameter = getParameter("FONTSIZE"); if (sParameter != null) { try { fontSize = Integer.parseInt(sParameter); } catch (NumberFormatException e) { showStatus("Error: Font Size must be a number"); fontSize = 30; } } setFont(new Font(myFont,Font.BOLD,fontSize)); for (int i=0; i< 3; i++) { sParameter = getParameter("MESSAGE"+i); if (sParameter != null) message[i] = sParameter; } setBackground(Color.white); // 設背景白色 float c = 0.0f; // 設顏色矩陣 for (int i=0; i < someColors.length; i++, c+= (1.0f/someColors.length)) someColors[i] = Color.getHSBColor(c,1.0f,1.0f); x = size().width; // 字的X座標 repaint(); // 呼叫繪圖方法 } public void start() { if (myThread == null) { myThread = new Thread(this); // 設定這個執行緒 myThread.start(); // 啟動我的執行緒 } } public void run() { while (true) { // 跑個沒完 repaint(); // 呼叫繪圖方法 try { Thread.sleep(75+x/5); } // 改變小睡片刻速度 catch(Exception e){ // 抓住例外 System.out.println("Error: "+ e);} // 錯在何方? } } public void update(Graphics g) { paint(g); // 不清螢幕 } public void paint(Graphics g) { // 繪圖方法 int width = size().width; // 寬度 g.setColor(Color.white); // 用背景的白色洗 g.fillArc(0,0,100,100,315,90); // 洗嘴巴 g.drawString(message[iMessage],x,63); // 洗字 if ((x < 40) || (x > width)) // 重來 { iMessage = 1 - iMessage; x = width; iColor++; iColor %= someColors.length; // 變顏色 } g.setColor(someColors[iColor]); // 設顏色 x -= 10; a = 35 - a; g.fillArc(0,0,100,100,45-a,270+a*2); // 畫嘴巴 g.drawString(message[iMessage],x,63); // 畫字串 g.drawString(message[2],width -(iMessage*160+200),30); } public boolean mouseDown(java.awt.Event evt, int xx, int yy) { if (threadSuspended) { myThread.resume(); // 恢復執行 } else { myThread.suspend(); // 暫停執行 } threadSuspended = !threadSuspended; // 改變布林值 return true; } public void stop() { if (myThread != null) { myThread.stop(); // 停止我的執行緒 myThread = null; // 空白我的執行緒 } } public String getAppletInfo() { // 版權所有 return new String( "GooLuck, copyright(c) 1996 Symon Chang, Symon & Associates"); } } //
譚鈺鈿的太極圖 Applet
我的同事譚鈺鈿,也是我 Java 班上的學生寫了一個太極圖的動態頁面,我覺得她 的這個 Applet 很有創意,特別拿來和讀者分享。 程式的全文如下:
/* Animation of the Tai Chi Symbolic Sign * - the sign rotates, zooms in and out on screen * * By: Cynthia Tam, June 96, Java class * Modified by: Symon Chang, July 96 * */ import java.awt.*; import java.applet.*; public class TaiChi2 extends Applet implements Runnable { Thread myThread = null; int iWhatColor = 0; Color BlackWhite[] = { Color.black, Color.white } ; int a = 0, b = 0, c = 30, k = 1; public void init() { setBackground(Color.gray); // 設背景灰色 } public void start() { if (myThread == null) { myThread = new Thread(this); myThread.start(); } } public void run() { while (myThread != null) { try { Thread.sleep(300+c); } catch(Exception e) { showStatus("Error " + e); } repaint(); } } public void update(Graphics g) { paint(g); // 不清螢幕 } public void paint (Graphics g) { g.clearRect(a, b, c, c+1); // 清除舊太極 if ( b <= 6) { k= 1; a=0; c=30; } if ( b > 100) k= -1; a += (2-k)*5; b+= k*5; c += k*8; // 計算新位置及大小 drawTaiChi(g, a, b, c); // 畫新太極 } public void drawTaiChi (Graphics g, int x, int y, int w) { iWhatColor = 1 - iWhatColor; // 黑白交替 g.setColor(BlackWhite[iWhatColor]); g.fillArc(x, y, w, w, 270, 180); // 畫半圓 g.setColor(BlackWhite[1-iWhatColor]); g.fillArc(x, y, w, w, 90, 180); // 畫半圓 g.fillArc(x+w/4,y,w/2, w/2, 270, 180); // 畫半圓 g.setColor(BlackWhite[iWhatColor]); g.fillOval(x+w/4,y+w/2,w/2,w/2); // 畫圓 g.fillOval(x+w/16*7, y+w/6, w/8, w/8); // 畫圓 g.setColor(BlackWhite[1-iWhatColor]); g.fillOval(x+w/16*7,y+w/6+w/2,w/8,w/8); // 畫圓 } public void stop() { if (myThread != null) { myThread.stop(); myThread = null; } } }
Java(tm) is registered trademarks of SUN Microsystems, Inc.
歡迎對本站內容提出您的寶貴意見, E-mail: symonchang@earthlink.net 如需使用或引用本站的資料時,請注意各相關智慧和著作所有權。
回首頁 Back to Home 上一頁 Previous Page 下一頁 Next Page 任一頁 Any Page Symon Chang 小台哥 Symon & Associates, CA. U.S.A symonchang@earthlink.net Last modified: 08-16-96