亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

使用 JFreeChart來創建基于web的圖表

2019-11-18 12:52:20
字體:
來源:轉載
供稿:網友

  WWW的發展使得基于因特網的應用程序不再局限于靜態或者簡單的動態內容提供。傳統的一些以軟件包形式發布應用程序例如報表系統等都在逐漸搬到因特網上。但是這兩者之間有著天壤之別,雖然對于數據獲取、業務處理等方面基本類似,但是最大的差別在于用戶界面。為了能在web瀏覽器上顯示要求用戶界面使用Html以及圖片的方式來展現數據,而傳統的一些利用操作系統本身的控件來開發的用戶界面無法適應琳瑯滿目的客戶端,因此在這里也變得無能為力。回到本文的題目上來,為了創建一個可以在web瀏覽器上查看到圖表一般有兩種做法:第一種就是使用applet利用java本身對圖形的支持來顯示一個圖表;第二種就是直接在web服務器端生成好圖表圖片文件后發送給瀏覽器。第一種方式顯然對于客戶端要求太高,隨著現在主流瀏覽器放棄對JAVA的支持后,這種方式只適合一些局域網的應用,而對于因特網的環境就顯得不太適合。因此我們下面將介紹一個JAVA的圖表引擎JFreeChart用來產生基于WEB的圖表。
  
  一、JFreeChart項目簡介
  JFreeChart是開放源代碼站點SourceForge.net上的一個JAVA項目,它主要用來各種各樣的圖表,這些圖表包括:餅圖、柱狀圖(普通柱狀圖以及堆棧柱狀圖)、線圖、區域圖、分布圖、混合圖、甘特圖以及一些儀表盤等等。這些不同式樣的圖表基本上可以滿足目前的要求。為了減少篇幅本文主要介紹前面三種類型的圖表,讀者可以觸類旁通去開發其他樣式的圖表。下面幾個是JFreeChart產生的這三種類型圖表的結果:
  
 使用 JFreeChart來創建基于web的圖表(圖一)

  
圖1

  
 使用 JFreeChart來創建基于web的圖表(圖二)

  
圖2

  
 使用 JFreeChart來創建基于web的圖表(圖三)

  
圖3

  上面的三個圖都是表示四個季度的某個產品的銷量信息。在繼續下面小節之前必須先預備好開發環境,因為是基于WEB瀏覽器的圖表展現,因此需要一個Servlet引擎或者是J2EE應用服務器(例如WebSphere,Tomcat等)。WEB環境的搭建就不累贅了,讀者根據喜好自行安裝。JFreeChart引擎本身需要到SourceForge.net上下載,地址如下:
  JFreeChart主頁:http://www.jfree.org/jfreechart/index.html
  JFreeChart下載頁面:http://sourceforge.net/PRojects/jfreechart/
  
  下載的時候需要注重的是必須下載兩個文件:JFreeChart以及Jcommon。目前最新配套版本是:JFreeChart 0.9.11 Jcommon 0.8.6
  
  這里有點筆者在開發中遇見的問題需要注重的是:在使用Eclipse開發的時候會報一個莫名其妙的錯誤,錯誤可能指向某個類文件的第一行。碰到這樣的問題一般是因為沒有把Jcommon的jar包設置到項目的類路徑中的緣故。具體的原因不祥。 (還有log4j等也咬一起導入)。
  
  二、解讀JFreeChart的源碼結構
  在開始使用JFreeChart之前我們有必要先大概了解一下JFreeChart本身的結構以及它所帶一些例子程序,這樣有助于我們下一步自行開發。下載JFreeChart包后已經帶有非常豐富的例子,因為JFreeChart這個項目本身的使用文檔非常少,因此學習它最好的辦法就是學習它所帶的例子源碼。在包org.jfree.chart.demo中有幾十個文件用于展示JFreeChart所能支持的所有圖表的結果。假如你的JDK是比較新的情況下可能在運行這些例子時會有問題,現象如下:
  
  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"
  
  這個錯誤是由于新版的Swing大量的使用了微軟的DirectDraw的技術來提高畫圖的性能,而可能你的顯卡在這時候會跟你鬧點情緒或者顯卡本身并不支持這樣的一個技術。難道就沒有辦法了嘛?要解決這個問題也非常簡單,我們可以屏蔽掉DirectDraw,不讓Swing使用該技術就可以了。在運行這些代碼時給虛擬機指定參數-Dsun.java2d.noddraw即可。
  
  這時可能你又該納悶了,不說是基于Web的圖表嘛,怎么又扯到Swing上了?這是因為為了使開發者輕易上手,無需配置任何運行環境,所以這些例子都是基于GUI方式的用于展現給開發者假如生成一個圖表,我們要學習的也就是如何利用這個引擎生成圖表而不是怎么來顯示一個圖表。當我們把生成的圖表對象EXPort到一個圖像文件即可在Web上發布。
  
  下面我們來介紹JFreeChart中幾個核心的對象類:
  <table boder=0>
  <tr><td>類名</td><td>類的作用以及簡單描述</td></tr>
  <tr><td>JFreeChart</td><td>圖表對象,任何類型的圖表的最終表現形式都是在該對象進行一些屬性的定制。JFreeChart引擎本身提供了一個工廠類用于創建不同類型的圖表對象</td></tr>
  <tr><td>XXXXXDataset</td><td>數據集對象,用于提供顯示圖表所用的數據。根據不同類型的圖表對應著很多類型的數據集對象類</td></tr>
  <tr><td>XXXXXPlot</td><td> 圖表區域對象,基本上這個對象決定著什么樣式的圖表,創建該對象的時候需要Axis、Renderer以及數據集對象的支持</td></tr>
  <tr><td>XXXXXAxis</td><td> 用于處理圖表的兩個軸:縱軸和橫軸</td></tr>
  <tr><td>XXXXXRenderer</td><td>負責如何顯示一個圖表對象</td></tr>
  <tr><td>XXXXXURLGenerator</td><td> 用于生成Web圖表中每個項目的鼠標點擊鏈接</td></tr>
  <tr><td>XXXXXToolTipGenerator</td><td> 用于生成圖象的幫助提示,不同類型圖表對應不同類型的工具提示類</td></tr>
  </table>
  
  基本上我認為JFreeChart項目本身的類結構的設計并不是很好,首先在創建圖表的時候用到了大量的工廠方法,這樣做雖然可以簡化創建圖表對象的代碼,但是對項目本身或者開發人員來講自行擴展一種新的圖表都仍然是一件很麻煩的事情;其次除圖表對象本身外其余的類過于復雜,使用者必須去了解每個類型的圖表對象應該對應哪些Axis、Plot、Renderer類,并且必須非常熟悉這些類的構造函數中每個參數的具體含義。這些問題都大大困擾很多初學者。不過,雖然存在很多問題,但是JFreeChart本身仍不失為一個非常優秀的圖表引擎,況且項目本身也在逐漸的發展中。
  
  在非常簡略的介紹了JFreeChart本身的代碼結構后,下面我們開始動手試驗幾個常用的圖表并把他們放到web上。
  
  三、使用JFreeChart生成各種樣式的圖表
  限于篇幅的問題我們在這里只實現兩種常用的圖表,其他類型圖表讀者可以觸類旁通。我們先給出柱狀圖的實現,餅圖的實現再來跟柱狀圖進行比較。
  1 柱狀圖
  
  [code]package lius.chart.demo;
  
  import java.io.*;
  
  import org.jfree.data.*;
  import org.jfree.chart.*;
  import org.jfree.chart.plot.*;
  /**
   * 該類用于演示最簡單的柱狀圖生成
   * @author Winter Lau
   */
  public class BarChartDemo {
  
   public static void main(String[] args) throws IOException{
  
   CategoryDataset dataset = getDataSet2();
   JFreeChart chart = ChartFactory.createBarChart3D(
    "水果產量圖", // 圖表標題
    "水果", // 目錄軸的顯示標簽
    "產量", // 數值軸的顯示標簽
    dataset, // 數據集
    PlotOrientation.VERTICAL, // 圖表方向:水平、垂直
    true, // 是否顯示圖例(對于簡單的柱狀圖必須是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) {}
   }
   }
   /**
   * 獲取一個演示用的簡單數據集對象
   * @return
   */
   private static CategoryDataset getDataSet() {
   DefaultCategoryDataset dataset = new DefaultCategoryDataset();
   dataset.addvalue(100, null, "蘋果");
   dataset.addvalue(200, null, "梨子");<

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人欧美一区二区三区在线湿哒哒| 欧美成人免费在线观看| 九九九热精品免费视频观看网站| 欧美疯狂性受xxxxx另类| 久久伊人精品视频| 久久久亚洲天堂| 国产精品专区一| 欧美大秀在线观看| 午夜精品一区二区三区av| 青青草国产精品一区二区| 日韩欧美在线视频日韩欧美在线视频| 色综合影院在线| 日韩精品有码在线观看| 久久久久久久久国产精品| 在线视频欧美日韩精品| 国产不卡av在线| 成人激情视频在线观看| 91久久国产婷婷一区二区| 精品久久久中文| 欧美日韩在线一区| 欧美成人午夜激情在线| 成人激情视频在线| 亚洲伊人成综合成人网| 亚洲xxxx18| 亚洲一区亚洲二区| 国产亚洲精品激情久久| 欧美野外wwwxxx| 国产有码一区二区| 国外成人在线视频| 国产免费观看久久黄| 久久久av电影| 亚洲理论电影网| 91在线无精精品一区二区| 国产精品视频精品| 日本亚洲欧美三级| 亚洲伊人成综合成人网| 4k岛国日韩精品**专区| 欧美日韩国产在线看| 欧美日韩国产一区中文午夜| 欧美裸身视频免费观看| 国产伊人精品在线| 亚洲欧美中文字幕在线一区| 久久综合88中文色鬼| 国产精品久久久久久婷婷天堂| 国产精品美女呻吟| 久久久精品国产亚洲| 欧美精品久久久久久久久| 亚洲人成网站在线播| 一本色道久久88综合亚洲精品ⅰ| 7m第一福利500精品视频| 欧美亚洲一级片| 精品国产一区二区三区四区在线观看| 成人a级免费视频| 亚洲网站在线看| 性夜试看影院91社区| 国产精品白嫩美女在线观看| 欧美精品videosex牲欧美| 国产在线拍揄自揄视频不卡99| 国产日韩欧美一二三区| 亚洲国产私拍精品国模在线观看| 久久99精品国产99久久6尤物| 久久久久北条麻妃免费看| 久久99视频免费| 欧美xxxx做受欧美.88| 97精品伊人久久久大香线蕉| 亚洲第一网站男人都懂| 成人免费淫片视频软件| 国产日韩中文字幕| 在线视频日本亚洲性| 亚洲国产精品系列| 欧美激情一区二区三区久久久| 久久久久久久国产精品| 国产aⅴ夜夜欢一区二区三区| 欧美极品少妇xxxxx| 啊v视频在线一区二区三区| 2020久久国产精品| 91免费高清视频| 最近日韩中文字幕中文| 啊v视频在线一区二区三区| 久久精品国产成人精品| 国产综合在线观看视频| 精品国产区一区二区三区在线观看| 国产精品偷伦一区二区| 成人免费直播live| 亚洲第一视频在线观看| 欧美性做爰毛片| 九九热这里只有精品6| 亚洲第一区第二区| 2019国产精品自在线拍国产不卡| 日韩中文字幕视频在线观看| 91色琪琪电影亚洲精品久久| 国产精品视频色| 国产精品成av人在线视午夜片| 成人免费视频xnxx.com| 国产香蕉精品视频一区二区三区| 亚洲人成人99网站| 国产精品入口尤物| 欧美国产日韩免费| 亚洲美女精品久久| 亚洲男人av在线| 亚洲一区美女视频在线观看免费| 日韩中文字幕在线播放| 国产午夜精品一区二区三区| 中文国产成人精品久久一| 影音先锋欧美在线资源| 亚洲精品福利视频| 色综合老司机第九色激情| 成人久久18免费网站图片| 国产精品主播视频| 欧美电影免费观看高清| 在线播放日韩精品| 欧美一区二区三区……| 成人a在线视频| 欧美老肥婆性猛交视频| 欧美激情久久久久| 亚洲精品美女在线观看| 亚洲аv电影天堂网| 亚洲色图欧美制服丝袜另类第一页| 91青草视频久久| 日韩av网址在线| 亚洲午夜未满十八勿入免费观看全集| 91国内免费在线视频| 日韩在线观看电影| 欧美日韩美女在线观看| 色综合伊人色综合网| 欧美激情一区二区三区在线视频观看| 亚洲电影免费观看高清完整版在线| 欧美日韩一区二区免费在线观看| 国产日韩在线视频| 日韩高清不卡av| 久久久久久久久久久亚洲| 狠狠躁天天躁日日躁欧美| 成人h猎奇视频网站| 97在线日本国产| 国产精品欧美在线| 日本欧美一二三区| 亚洲精品日韩激情在线电影| 欧美激情影音先锋| 亚洲第一偷拍网| 国内成人精品视频| 97精品国产97久久久久久| 国产一区二区三区免费视频| 97婷婷大伊香蕉精品视频| 国产精品成av人在线视午夜片| 尤物tv国产一区| 中文字幕日韩欧美| 亚洲精品日韩在线| 国产大片精品免费永久看nba| 欧美国产乱视频| 成人av色在线观看| 色综合久久中文字幕综合网小说| 亚洲精品国产综合区久久久久久久| 久久视频在线免费观看| 91亚洲国产成人久久精品网站| 国产日韩在线精品av| 日韩成人av网址| 91亚洲国产精品| 国产精品美女在线观看| 欧美性黄网官网| 亚洲自拍偷拍色图| 欧美精品videofree1080p| 亚洲国产一区二区三区四区| 亚洲毛茸茸少妇高潮呻吟| 激情成人中文字幕|