Java語言中的Applet(Java小程序)和Application(Java應用程序)是在結構和功能上都存在很大差異的兩種不同的編程方式
Applet應用於Web頁上
可做出多姿多彩的頁面特效
給網站增輝添色
Application則與其他編程語言(如VB
VC)一樣
可編制各種應用程序
本文要討論的是第一種情況
在Web頁上用Java Applet繪制K線圖
K線是股市行情分析中的一種參數指標
用股票每日的開盤價
最高價
最低價
收盤價及成交量等數據進行作圖
配合五日
十日均線便可反映出一個階段內該支股票的漲跌走勢
Java Applet所做的K線圖多應用於證券類型的網站
以方便網上股民的分析操作
不過由於我國網速的關系
目前有些證券類網站把K線圖做成了圖片以節省下載的時間
當然
其繪制K線所用的工具(Java Applet)及繪制方法還是相同的
在編寫繪制K線的Java Applet時
有幾處關鍵問題要解決
即
)多線程的使用
)布局管理器的選擇
)數據輸入
輸出流的應用
)設置
監聽鼠標與鍵盤事件
下面通過一個實例
來詳細闡述整個編程過程和方法
《查看演示》
一
使用多線程
一個完整的Java Applet包含四個方法
Init()
Start()
Stop()
Destroy()(即
初始化
開始
停止
清除)
構成一個完整的生命周期
其運行次序也是由上而下順序執行
在繪制K線圖的過程中
除了要繪制窗體及代表股票升降的陰線
陽線矩形外
還要監聽鼠標事件並同時繪制一個自由移動的
十字
游標
來定位顯示所檢索股票每日的各種價格數值(如開盤價
收盤價等)
這時
為了避免閃爍和減少重新計算的等待時間
除了重繪跟隨鼠標移動的
十字
游標外
對頁面的布局及陰線
陽線矩形等不進行重繪
這就需要應用多線程來完成該項任務
.關於多線程的一些基本概念
多線程實際上就是啟動另一個進程
其運行的過程獨立於主程序之外
並從主程序的Start()方法載入
由Run()方法調用執行
實現多線程的方法有兩種
即
創建Thread類的子類(類的繼承)和實現runnable接口
為便於使用
Java把所有有關線程的功能封裝成Java類庫中的一個類
Java
lang
Thread
通過這個類
Java可以創建
控制和終止線程
完成有關多線程的所有操作
在Java語言中
一個子類只能繼承一個超類(父類)
由於我們所要編寫的Java Applet是應用於網頁中的
首先必須繼承浏覽器類(java
applet)
因此
在本例中我們通過實現runnable接口的方法來實現多線程
實現的語句如下
public class StockApplet extends java
applet
Applet implements Runnable
.多線程的應用
首先
在Init()方法中對要創建的線程(M_pointThread)進行定義及初始化
Thread M_pointThread=null;
然後
在Start()和Stop()方法中加入以下代碼
//當打開浏覽器頁面開始載入Java Applet代碼時
執行start()方法
public void start()
{
if (M_pointThread==null) //如果線程尚未產生
{
M_pointThread=new Thread(this); //則創建一個新線程
M_pointThread
start(); //啟動該線程
}
}
//在當前頁面關閉或轉向其他Web頁面時
調用stop()方法
以釋放系統資源
public void stop()
{
if (M_pointThread!=null) //如果線程尚在運行
{
M_pointThread
stop(); //停止該線程
M_pointThread=null; //釋放線程所占資源
}
}
.編寫線程運行的代碼
public void run()
{
M_graphics=getGraphics();
M_graphics
setXORMode(Color
white); //采用異或方法繪制
十字
游標
while(true)
{
try
{
if(MouseMove==true) //偵測到鼠標的移動後
執行以下代碼
{ //當鼠標位於以下區域(Java Applet布局)內時
執行畫線操作
if(x
>
&& x
<
){M_graphics
drawLine(x
x
);}
if(y
>
&& y
<
){M_graphics
drawLine(
y
y
);}
if(X >
&& X<
){M_graphics
drawLine(X
X
);}
if(Y >
&& Y<
){M_graphics
drawLine(
Y
Y);}
MouseMove=fase;
x
=X; //傳遞當前座標參數
y
=Y;
}
}
catch(NullPointerException npe){} //捕獲可能出現的異常
}
二
布局管理器
本例中的Java Applet運行時
要在頁面上Java Applet的運行區域內繪制相應的
標簽
來顯示不同的數值
並要加入一個
文本框
來接收輸入的股票代碼
對這些
標簽
和
文本框
位置及大小的設定
便屬於布局管理的應用范疇
Java語言中提供的布局管理器種類有
邊界式布局
卡片式布局
流式布局和網格式布局等
各有不同的特點
可根據實際需要選用
但有最大自由設計空間的是
無布局管理器
——即不使用任何布局格式
而通過手工方式添加組件到頁面布局的絕對位置上
本例中使用的便是
無布局管理器
在使用
無布局管理器
時
首先要作出聲明
即
setLayout(null);
然後用reshape()方法指定組件的具體位置和尺寸
基本語句如下所示
Label label
=new Label(); //定義標簽
this
add(label
); //把標簽加入布局管理器
label
reshape(
); //在指定位置繪制標簽
對於多個標簽和文本框
參照此格式添加即可
三
輸入
輸出數據流
Java Applet在客戶端浏覽器上運行時
要從服務器端讀取股票的相關數據進行做圖
這就涉及到Java數據流的運用
Java
io包提供了多個用於與各種I/O設備交換信息的類
其最頂層的兩個類便是輸入流類(InputStream)和輸出流類(OutputStream)
為了便於實現
在本例中我們先在服務器端把股票數據庫(如
show
dbf)中的有關字段寫入一文本文件中(其格式為
第一行為股票的漢字名稱
以後每一行內包括
開盤日期
開盤價
最高價
最低價
收盤價
成交量)
並以該支股票的代碼作為文件名(如
txt)
然後
再用Java Applet從服務器端的文本文件中讀取數據
這樣
就把對服務器端數據庫的訪問轉化為對文件的I/O操作
實現的語句如下
URL urlc=new URL(
+FileName+
txt
);
BufferedReader bis=new BufferedReader(new InputStreamReader(urlc
openStream()));
注
第一條語句中的為在本機執行調試操作的URL地址
在上傳到服務器上後要做相應的修改
FileName為要讀取的文本文件名
第二條語句定義了讀取輸入數據流的方法
四
監聽鍵盤及鼠標事件
在Java Applet小程序中
單擊按鈕
鍵入文本
使用鼠標或執行任何與界面相關的動作時
就發生一個事件
小程序就會作出適當的反應
在本例中
我們通過使用action()方法來獲得Java Applet小程序運行時所發生的事件
語句格式如下
public boolean action(Event evt
Object arg)
{
FileName=text
getText(); //提取文本框中輸入的參數
ReadData(); //調用讀數據流數據的方法
return true; //處理完畢
不需要其他方法再做處理
}
上面的action()方法中含有兩個參數
一個是Event類的一個對象evt
另一個是Object類的一個對象arg
Event對象告訴我們發生了哪種事件
而Object對象將進一步告訴我們有關該事件的情況
每當有Event監聽的事件發生時
Java Applet便自動調用該action()方法
至此
在掌握了上述編程中的一些要點後
我們便可以成功地編制出一個完整的繪制K線的Java Applet小程序了(完整的源代碼下載)
五
編制HTML文檔(l)
程序編制完成後
另外要做的是設置在Web頁面上調用Java Applet的頁面
即編制HTML文檔
l文檔的示例代碼如下
< HEAD >
< TITLE >股票K線圖< /TITLE >
< /HEAD >
< /body >
< /HTML >
在< APPLET >< /APPLET >標簽對內
是對Java Applet小程序的調用代碼
其中的StockApplet
class是經編譯後生成的class文件
codeBase指向的是class文件所存放的路徑
如果class文件與HTML文檔存放在同一目錄下
則可以省略這一項
至此
編制Java Applet小程序的工作便全部完成
在個人計算機上進行調試時
首先要安裝個人Web服務
然後
把StockApplet
class與HTML文檔一起拷貝到本機的WWW服務目錄下(如
C:\Inetpub\wwwroot\)
打開浏覽器
在地址欄內輸入
回車
進行測試操作
調試通過後
便可上傳至服務器投入運行了
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19286.html