您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么用Java在Web頁面上輸出統計圖”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“怎么用Java在Web頁面上輸出統計圖”文章能幫助大家解決問題。
在Inte.NET 和Intranet 的應用中,數據庫和Web 技術的結合是傳統MIS 系統移植到Internet(Intrant) 環境的關鍵, 已有不少廠商推出了各自的產品,但這些產品基本上是實現數據的html 格式輸出。在實際應用中,我們經常需要把數據以統計圖的形式表現出來,例如股票行情曲線圖的輸出。傳統的方法是把統計圖作為一個圖形文件放到Web 服務器的目錄中。這種做法雖然簡單,但有明顯的局限性:一是圖形文件要占用較大存儲空間;二是難以適應靈活復雜的查詢要求;三是圖形文件隨數據庫的變化而更新,加重了服務器的負擔,也容易造成圖形和數據庫的不一致。
顯然,要實現上述要求,需要兩個關鍵環節:一是從數據庫中讀出數據;二是根據讀出的數據在Web 頁面中繪圖。我們采用JdbC 訪問數據庫,在Web 頁面中繪圖則使用Java.awt 包中提供的Graphics 類實現。
為便于表述,建立數據表如下:
項 目
指 標
水 產 養 殖
60
工 程 管 理
89
抗 旱 防 汛
100
財 務
200
辦 公 室
350
勘 測 設 計
80
我們的目標就是把上表用統計圖表現出來(本文用水平柱狀圖)。本文中所指數據庫均為如上形式的表,其字段1 為字符形字段,表示項目信息;字段2 為數值形字段(用浮點形讀出),表示指標數。實際應用中,對程序稍作修改,就可使其更加靈活通用。
為了繪制各種形式的圖表,先定義一個Graph 抽象類(注意不是Graphics):
import java.sql. *;
import java.awt. *;
abstract class Graph{
int height,width; // 繪圖區域的高和寬
int maxRow=50,row=0;
// 可容納的最大記錄數和實有記錄數
Color color=new Color(50,50,200); // 默認繪圖顏色
float scale; // 比例尺
String[] name; // 項目名緩沖區
float[] value; // 指標值緩沖區
public Graph(Dimension d,int maxRows,Color fColor){
height=d.height;
width=d.width;
name=new String[maxRows];
value=new float[maxRows];
color=fColor;
}
public void setResult(ResultSet result)
{ // 把查詢結果讀入緩沖區
try{
row=0;
while(result.next() &&row<maxRow){
name[row]=result.getString(1);
value[row]=result.getFloat(2);
row + +;
}
}
catch(Exception ex){
System.out.println(“n failure!" +ex.getMessage()); }
}
// 繪制統計圖的抽象方法, 在子類中實現
}
在這個類中,定義了圖表的一般特性,如顏色、比例尺、記錄緩沖區等,并實現了把查詢結果置入緩沖區的setResult 方法。因為各種圖表的繪制方法完全不同,故把draw 方法定義為抽象方法,有待其子類實現。
限于篇幅,本文僅介紹實現繪制水平柱狀圖的子類GraPHPost, 其主要功能是實現draw 方法。其他子類與其類似。
import java.sql.*;
import java.awt.*;
public class GraphPost extends Graph{
float interval=0;
//柱間空白在柱寬度(含柱間空白)
中所占比例,0<interval0) interval=ival;
}
void draw(Graphics g){
FontMetrics fontMetrics=g.getFontMetrics();
try{
Color bgColor=new Color(255,255,255);
g.setColor(bgColor);
g.fillRect(0,0,width,height); //填充背景色
g.setColor(color);
int maxLen=0;
float maxValue=0;
for (int i=0;imaxLen)
maxLen=fontMetrics.stringWidth(name[i]);
if (value[i]>maxValue)
maxValue=value[i];
}
xMargin=maxLen+10;//
yMargin=fontMetrics.getHeight()+10;
int cHeight=fontMetrics.getHeight();
int step=getStep(maxValue);
//計算x坐標刻度單位
scale=(width-xMargin)/maxValue;
eHight=(height-yMargin)/row;
g.drawRect(xMargin-1,0,width-xMargin,height
-yMargin); //繪出圖形外框
for(int i=1;i*step10){
mo=mo*10;
st=(int)(value/10)/mo;
}
return (st+1)*mo;
}
}
對數據庫的查詢在applet 主類中用creatResultSet 方法實現:
private static ResultSet creatResultSet
(String dStr,String sqlStr)
/ * 根據給定的數據源和
sql 查詢語句讀取數據庫*/ {......}
在applet 主類的paint() 方法中,調用類GraphPost 的draw 方法,即可實現統計圖的輸出。為把查詢結果保存在GraphPost 的數據緩沖區中供paint() 方法多次使用,需要把一個GraphPost 對象定義為applet 主類的成員。在applet 主類的init() 方法中,對GraphPost 對象初始化,并完成JDBC 驅動程序注冊。在applet 主類的start() 方法中,連接數據庫,執行查詢,并把查詢結果存放到GraphPost 對象的數據緩沖區中。這樣, 在每次回到包含該applet 的頁面時, 都要重新查詢數據庫, 保證用戶閱讀到數據庫的最新信息。
下面是applet 主類代碼:
import java.applet.Applet;
import java.sql. *;
import java.awt. *;
public class WebGraph extends Applet {
GraphPost graphPost;
public void init() {
try{
Color color=new Color(20,20,230);
Class.forName("sun.jdbc.odbc.JdbcOdbcdriver");
// 注冊驅動程序
graphPost=new GraphPost(size(),30,color,0.3f);
// 初始化graphPost 對象
}
catch(Exception e){
System.out.println("n" +“init error" +e.getMessage());
}
}
public void start(){
try{
ResultSet rs;
String dSourName="FoxPro Files";
String sqlStr="select *FROM TEST";
rs=creatResultSet(dSourName,sqlStr);
// 從數據庫中提取數據
graphPost.setResult(rs);
// 把查詢結果發送給graphPost
rs.close();
}
catch(Exception e){
System.out.println("n" +“start error"
+e.getMessage());
}
}
public void paint(Graphics g){
graphPost.draw(g);
// 調用graphPost 的draw 方法繪制柱狀統計圖
}
private static ResultSet creatResultSet(String dStr,String sqlStr)
throws SQLException{
/ *根據給定的數據源和sql
查詢語句讀取數據庫*/
String datasr=dStr;
Connection con1=DriverManager.getConnection
("jdbc:odbc:" +datasr); // 連接數據庫
Statement stmt1=con1.createStatement();
return stmt1.executeQuery(sqlStr);// 執行查詢
}
}
關于“怎么用Java在Web頁面上輸出統計圖”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。