<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Terry.Li-彬

    虛其心,可解天下之問(wèn);專(zhuān)其心,可治天下之學(xué);靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      143 隨筆 :: 344 文章 :: 130 評(píng)論 :: 0 Trackbacks
    WWW的發(fā)展使得基于因特網(wǎng)的應(yīng)用程序不再局限于靜態(tài)或者簡(jiǎn)單的動(dòng)態(tài)內(nèi)容提供。傳統(tǒng)的一些以軟件包形式發(fā)布應(yīng)用程序例如報(bào)表系統(tǒng)等都在逐漸搬到因特網(wǎng)上。但是這兩者之間有著天壤之別,雖然對(duì)于數(shù)據(jù)獲取、業(yè)務(wù)處理等方面基本類(lèi)似,但是最大的差別在于用戶界面。為了能在web瀏覽器上顯示要求用戶界面使用HTML以及圖片的方式來(lái)展現(xiàn)數(shù)據(jù),而傳統(tǒng)的一些利用操作系統(tǒng)本身的控件來(lái)開(kāi)發(fā)的用戶界面無(wú)法適應(yīng)琳瑯滿目的客戶端,因此在這里也變得無(wú)能為力。回到本文的題目上來(lái),為了創(chuàng)建一個(gè)可以在web瀏覽器上查看到圖表一般有兩種做法:第一種就是使用applet利用java本身對(duì)圖形的支持來(lái)顯示一個(gè)圖表;第二種就是直接在web服務(wù)器端生成好圖表圖片文件后發(fā)送給瀏覽器。第一種方式顯然對(duì)于客戶端要求太高,隨著現(xiàn)在主流瀏覽器放棄對(duì)JAVA的支持后,這種方式只適合一些局域網(wǎng)的應(yīng)用,而對(duì)于因特網(wǎng)的環(huán)境就顯得不太適合。因此我們下面將介紹一個(gè)JAVA的圖表引擎JFreeChart用來(lái)產(chǎn)生基于WEB的圖表。
      
      一、JFreeChart項(xiàng)目簡(jiǎn)介
      JFreeChart是開(kāi)放源代碼站點(diǎn)SourceForge.net上的一個(gè)JAVA項(xiàng)目,它主要用來(lái)各種各樣的圖表,這些圖表包括:餅圖、柱狀圖(普通柱狀圖以及堆棧柱狀圖)、線圖、區(qū)域圖、分布圖、混合圖、甘特圖以及一些儀表盤(pán)等等。這些不同式樣的圖表基本上可以滿足目前的要求。為了減少篇幅本文主要介紹前面三種類(lèi)型的圖表,讀者可以觸類(lèi)旁通去開(kāi)發(fā)其他樣式的圖表。下面幾個(gè)是JFreeChart產(chǎn)生的這三種類(lèi)型圖表的結(jié)果:
      
     

      
    圖1

      
     

      
    圖2

      
     

      
    圖3

      上面的三個(gè)圖都是表示四個(gè)季度的某個(gè)產(chǎn)品的銷(xiāo)量信息。在繼續(xù)下面小節(jié)之前必須先準(zhǔn)備好開(kāi)發(fā)環(huán)境,因?yàn)槭腔赪EB瀏覽器的圖表展現(xiàn),因此需要一個(gè)Servlet引擎或者是J2EE應(yīng)用服務(wù)器(例如WebSphere,Tomcat等)。WEB環(huán)境的搭建就不累贅了,讀者根據(jù)喜好自行安裝。JFreeChart引擎本身需要到SourceForge.net上下載,地址如下:
      JFreeChart主頁(yè):http://www.jfree.org/jfreechart/index.html
      JFreeChart下載頁(yè)面:http://sourceforge.net/projects/jfreechart/
      
      下載的時(shí)候需要注意的是必須下載兩個(gè)文件:JFreeChart以及Jcommon。目前最新配套版本是:JFreeChart 0.9.11 Jcommon 0.8.6
      
      這里有點(diǎn)筆者在開(kāi)發(fā)中遇見(jiàn)的問(wèn)題需要注意的是:在使用Eclipse開(kāi)發(fā)的時(shí)候會(huì)報(bào)一個(gè)莫名其妙的錯(cuò)誤,錯(cuò)誤可能指向某個(gè)類(lèi)文件的第一行。遇到這樣的問(wèn)題一般是因?yàn)闆](méi)有把Jcommon的jar包設(shè)置到項(xiàng)目的類(lèi)路徑中的緣故。具體的原因不祥。 (還有l(wèi)og4j等也咬一起導(dǎo)入)。
      
      二、解讀JFreeChart的源碼結(jié)構(gòu)
      在開(kāi)始使用JFreeChart之前我們有必要先大概了解一下JFreeChart本身的結(jié)構(gòu)以及它所帶一些例子程序,這樣有助于我們下一步自行開(kāi)發(fā)。下載JFreeChart包后已經(jīng)帶有非常豐富的例子,因?yàn)镴FreeChart這個(gè)項(xiàng)目本身的使用文檔非常少,因此學(xué)習(xí)它最好的辦法就是學(xué)習(xí)它所帶的例子源碼。在包org.jfree.chart.demo中有幾十個(gè)文件用于展示JFreeChart所能支持的所有圖表的結(jié)果。如果你的JDK是比較新的情況下可能在運(yùn)行這些例子時(shí)會(huì)有問(wèn)題,現(xiàn)象如下:
      
      java.lang.UnsatisfiedLinkError: initDDraw
       at sun.awt.windows.Win32OffScreenSurfaceData.initDDraw(Native Method)
       at sun.awt.windows.Win32OffScreenSurfaceData.<clinit>(Win32OffScreenSurfaceData.java:141)
       at sun.awt.Win32GraphicsDevice.<clinit>(Win32GraphicsDevice.java:58)
       at sun.awt.Win32GraphicsEnvironment.makeScreenDevice(Win32GraphicsEnvironment.java:168)
       at sun.java2d.SunGraphicsEnvironment.getScreenDevices(SunGraphicsEnvironment.java:240)
       at sun.awt.Win32GraphicsEnvironment.getDefaultScreenDevice(Win32GraphicsEnvironment.java:61)
       at java.awt.Window.init(Window.java:224)
       at java.awt.Window.<init>(Window.java:268)
       at java.awt.Frame.<init>(Frame.java:398)
       at javax.swing.JFrame.<init>(JFrame.java:198)
       at org.jfree.chart.demo.JFreeChartDemo.<init>(JFreeChartDemo.java:148)
       at org.jfree.chart.demo.JFreeChartDemo.main(JFreeChartDemo.java:285)
      Exception in thread "main"
      
      這個(gè)錯(cuò)誤是由于新版的Swing大量的使用了微軟的DirectDraw的技術(shù)來(lái)提高畫(huà)圖的性能,而可能你的顯卡在這時(shí)候會(huì)跟你鬧點(diǎn)情緒或者顯卡本身并不支持這樣的一個(gè)技術(shù)。難道就沒(méi)有辦法了嘛?要解決這個(gè)問(wèn)題也非常簡(jiǎn)單,我們可以屏蔽掉DirectDraw,不讓Swing使用該技術(shù)就可以了。在運(yùn)行這些代碼時(shí)給虛擬機(jī)指定參數(shù)-Dsun.java2d.noddraw即可。
      
      這時(shí)可能你又該納悶了,不說(shuō)是基于Web的圖表嘛,怎么又扯到Swing上了?這是因?yàn)闉榱耸归_(kāi)發(fā)者容易上手,無(wú)需配置任何運(yùn)行環(huán)境,所以這些例子都是基于GUI方式的用于展現(xiàn)給開(kāi)發(fā)者如果生成一個(gè)圖表,我們要學(xué)習(xí)的也就是如何利用這個(gè)引擎生成圖表而不是怎么來(lái)顯示一個(gè)圖表。當(dāng)我們把生成的圖表對(duì)象Export到一個(gè)圖像文件即可在Web上發(fā)布。
      
      下面我們來(lái)介紹JFreeChart中幾個(gè)核心的對(duì)象類(lèi):
      <table boder=0>
      <tr><td>類(lèi)名</td><td>類(lèi)的作用以及簡(jiǎn)單描述</td></tr>
      <tr><td>JFreeChart</td><td>圖表對(duì)象,任何類(lèi)型的圖表的最終表現(xiàn)形式都是在該對(duì)象進(jìn)行一些屬性的定制。JFreeChart引擎本身提供了一個(gè)工廠類(lèi)用于創(chuàng)建不同類(lèi)型的圖表對(duì)象</td></tr>
      <tr><td>XXXXXDataset</td><td>數(shù)據(jù)集對(duì)象,用于提供顯示圖表所用的數(shù)據(jù)。根據(jù)不同類(lèi)型的圖表對(duì)應(yīng)著很多類(lèi)型的數(shù)據(jù)集對(duì)象類(lèi)</td></tr>
      <tr><td>XXXXXPlot</td><td> 圖表區(qū)域?qū)ο螅旧线@個(gè)對(duì)象決定著什么樣式的圖表,創(chuàng)建該對(duì)象的時(shí)候需要Axis、Renderer以及數(shù)據(jù)集對(duì)象的支持</td></tr>
      <tr><td>XXXXXAxis</td><td> 用于處理圖表的兩個(gè)軸:縱軸和橫軸</td></tr>
      <tr><td>XXXXXRenderer</td><td>負(fù)責(zé)如何顯示一個(gè)圖表對(duì)象</td></tr>
      <tr><td>XXXXXURLGenerator</td><td> 用于生成Web圖表中每個(gè)項(xiàng)目的鼠標(biāo)點(diǎn)擊鏈接</td></tr>
      <tr><td>XXXXXToolTipGenerator</td><td> 用于生成圖象的幫助提示,不同類(lèi)型圖表對(duì)應(yīng)不同類(lèi)型的工具提示類(lèi)</td></tr>
      </table>
      
      基本上我認(rèn)為JFreeChart項(xiàng)目本身的類(lèi)結(jié)構(gòu)的設(shè)計(jì)并不是很好,首先在創(chuàng)建圖表的時(shí)候用到了大量的工廠方法,這樣做雖然可以簡(jiǎn)化創(chuàng)建圖表對(duì)象的代碼,但是對(duì)項(xiàng)目本身或者開(kāi)發(fā)人員來(lái)講自行擴(kuò)展一種新的圖表都仍然是一件很麻煩的事情;其次除圖表對(duì)象本身外其余的類(lèi)過(guò)于復(fù)雜,使用者必須去了解每個(gè)類(lèi)型的圖表對(duì)象應(yīng)該對(duì)應(yīng)哪些Axis、Plot、Renderer類(lèi),并且必須非常熟悉這些類(lèi)的構(gòu)造函數(shù)中每個(gè)參數(shù)的具體含義。這些問(wèn)題都大大困擾很多初學(xué)者。不過(guò),雖然存在很多問(wèn)題,但是JFreeChart本身仍不失為一個(gè)非常優(yōu)秀的圖表引擎,況且項(xiàng)目本身也在逐漸的發(fā)展中。
      
      在非常簡(jiǎn)略的介紹了JFreeChart本身的代碼結(jié)構(gòu)后,下面我們開(kāi)始動(dòng)手試驗(yàn)幾個(gè)常用的圖表并把他們放到web上。
      
      三、使用JFreeChart生成各種樣式的圖表
      限于篇幅的問(wèn)題我們?cè)谶@里只實(shí)現(xiàn)兩種常用的圖表,其他類(lèi)型圖表讀者可以觸類(lèi)旁通。我們先給出柱狀圖的實(shí)現(xiàn),餅圖的實(shí)現(xiàn)再來(lái)跟柱狀圖進(jìn)行比較。
      1 柱狀圖
      
      [code]package lius.chart.demo;
      
      import java.io.*;
      
      import org.jfree.data.*;
      import org.jfree.chart.*;
      import org.jfree.chart.plot.*;
      /**
       * 該類(lèi)用于演示最簡(jiǎn)單的柱狀圖生成
       * @author Winter Lau
       */
      public class BarChartDemo {
      
       public static void main(String[] args) throws IOException{
      
       CategoryDataset dataset = getDataSet2();
       JFreeChart chart = ChartFactory.createBarChart3D(
        "水果產(chǎn)量圖", // 圖表標(biāo)題
        "水果", // 目錄軸的顯示標(biāo)簽
        "產(chǎn)量", // 數(shù)值軸的顯示標(biāo)簽
        dataset, // 數(shù)據(jù)集
        PlotOrientation.VERTICAL, // 圖表方向:水平、垂直
        true, // 是否顯示圖例(對(duì)于簡(jiǎn)單的柱狀圖必須是false)
        false, // 是否生成工具
        false // 是否生成URL鏈接
        );
       
       FileOutputStream fos_jpg = null;
       try {
      fos_jpg = new FileOutputStream("D:\\fruit.jpg");
      ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,400,300,null);
       } finally {
      try {
      fos_jpg.close();
      } catch (Exception e) {}
       }
       }
       /**
       * 獲取一個(gè)演示用的簡(jiǎn)單數(shù)據(jù)集對(duì)象
       * @return
       */
       private static CategoryDataset getDataSet() {
       DefaultCategoryDataset dataset = new DefaultCategoryDataset();
       dataset.addvalue(100, null, "蘋(píng)果");
       dataset.addvalue(200, null, "梨子");<
    posted on 2007-09-11 10:17 禮物 閱讀(404) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 報(bào)表
    主站蜘蛛池模板: 亚洲精品动漫人成3d在线| 精品多毛少妇人妻AV免费久久| 一边摸一边爽一边叫床免费视频| 成全视频在线观看免费| 嫖丰满老熟妇AAAA片免费看| 亚洲A丁香五香天堂网| 337p欧洲亚洲大胆艺术| 国产精品亚洲综合| 日韩人妻无码精品久久免费一 | 亚洲AV无码成人精品区在线观看| 99久久婷婷国产综合亚洲| 9久久免费国产精品特黄| AV免费网址在线观看| 亚洲中文久久精品无码| 亚洲久悠悠色悠在线播放| 国产一二三四区乱码免费| 成年女人免费v片| 亚洲成av人在线视| 国产偷国产偷亚洲高清在线| 99久久免费精品视频| 亚洲精品成人区在线观看| 国产99在线|亚洲| 大地影院MV在线观看视频免费| 日韩在线天堂免费观看| 亚洲日本在线观看| 一级做a爰片久久毛片免费看 | 免费成人福利视频| 久久久久亚洲精品天堂久久久久久| 色偷偷亚洲女人天堂观看欧| 国产日韩一区二区三免费高清| 国产精品久免费的黄网站| 亚洲春色在线观看| 国产精品视频白浆免费视频| 免费在线观看毛片| 亚洲偷自拍另类图片二区| 久久综合给合久久国产免费| 久久亚洲国产成人影院网站| 黄页视频在线观看免费| 拍拍拍又黄又爽无挡视频免费| 亚洲综合自拍成人| 黄网站免费在线观看|