因為專注,所以專業

          我的Java Blog

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            21 隨筆 :: 30 文章 :: 6 評論 :: 0 Trackbacks
          在這里主要貼上JFreeChart做的兩個小例子,分別是柱狀圖和動態顯示JVM內存狀況圖。
          先說明一下jfreechart的概念,jfreechart工具基本上把一個圖形分成了幾個邏輯部分:
                1.首先是整個的畫布對象(chart),畫布就相當與一個大的容器,包含一些圖形元素,比如為一張白紙
                2.然后是畫圖區域對象(plot),就是實際圖形所占據的區域,比如為白紙上的一個長方形
                3.然后是圖形所需要兩條軸對象(axis),比如為白紙上的兩條軸線
                4.最后是如何進行圖像的繪制對象(render),比如為一只畫圖的筆
                5.除開上面的這些對象,還有一個最主要的就是通過必須的數據集(dataset)來生成圖形了
          好了,其它的API就看文檔了。現在開始說開發JFreeChart例子的步驟:
          1. 首先下載jfreechart包。
          2. 接著用MyEclipse創建一個Java Project.
          3. 引用包, 要加入的包是gnujaxp.jar, jfreechart-1.0.12.jar, jcommon-1.0.15.jar
          這樣就把開發環境配好了,接下來就是創建類文件。先從柱狀圖開始.
           1 import java.io.FileOutputStream;
           2 
           3 import org.jfree.chart.ChartFactory;
           4 import org.jfree.chart.ChartUtilities;
           5 import org.jfree.chart.JFreeChart;
           6 import org.jfree.chart.plot.PlotOrientation;
           7 import org.jfree.data.category.CategoryDataset;
           8 import org.jfree.data.category.DefaultCategoryDataset;
           9 
          10 public class BarChartDemo {
          11     private static String rowKeys[] ={"Apple""Banana""Watermelon"};
          12     private static String columnKeys[] ={"Guangzhou""Shanghai""Beijing"};
          13     private static String rowKeys_zh_CN[] ={"蘋果""香蕉""西瓜"};
          14     private static String columnKeys_zh_CN[] ={"廣州""上海""北京"};
          15     /**
          16      * @param args
          17      */
          18     public static void main(String[] args) {
          19         CategoryDataset dataSet = getComplexDataSet();
          20         JFreeChart chart = ChartFactory.createBarChart("Fruit Output Chart",// 圖表標題
          21                 "Fruit",// 目錄軸的顯示標簽
          22                 "Output",// 數值軸的顯示標簽
          23                 dataSet,// 數據集
          24                 PlotOrientation.VERTICAL,// 圖表方向:水平、垂直
          25                 true,// 是否顯示圖例(對于簡單的柱狀圖必須是false)
          26                 false,// 是否生成工具
          27                 false// 是否生成URL鏈接
          28                 );
          29         FileOutputStream fosJPG = null;
          30         try {
          31             fosJPG = new FileOutputStream("D:\\fruit.jpg");
          32             ChartUtilities.writeChartAsJPEG(fosJPG, chart, 400300);
          33         } catch (Exception e) {
          34             e.printStackTrace();
          35         } finally {
          36             try {
          37                 fosJPG.close();
          38             } catch (Exception e) {
          39                 e.printStackTrace();
          40             }
          41         }
          42     }
          43 
          44     /**
          45      * 獲取一個演示用的簡單數據集對象
          46      * 
          47      * @return
          48      */
          49     private static CategoryDataset getDataSet() {
          50         DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
          51         categoryDataset.addValue(100"", rowKeys[0]);
          52         categoryDataset.addValue(200"", rowKeys[1]);
          53         categoryDataset.addValue(300"", rowKeys[2]);
          54         return categoryDataset;
          55     }
          56 
          57     /**
          58      * 獲取一個演示用的組合數據集對象
          59      * 
          60      * @return
          61      */
          62     private static CategoryDataset getComplexDataSet() {
          63         DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
          64         categoryDataset.addValue(100, columnKeys[0], rowKeys[0]);
          65         categoryDataset.addValue(110, columnKeys[1], rowKeys[0]);
          66         categoryDataset.addValue(120, columnKeys[2], rowKeys[0]);
          67         categoryDataset.addValue(200, columnKeys[0], rowKeys[1]);
          68         categoryDataset.addValue(210, columnKeys[1], rowKeys[1]);
          69         categoryDataset.addValue(220, columnKeys[2], rowKeys[1]);
          70         categoryDataset.addValue(300, columnKeys[0], rowKeys[2]);
          71         categoryDataset.addValue(310, columnKeys[1], rowKeys[2]);
          72         categoryDataset.addValue(320, columnKeys[2], rowKeys[2]);
          73         return categoryDataset;
          74     }
          75 }
          76 

          運行后,可看到結果了。
          接著下來是動態顯示JVM內存狀況圖的原碼.
            1 import java.awt.BasicStroke;
            2 import java.awt.BorderLayout;
            3 import java.awt.Color;
            4 import java.awt.Font;
            5 import java.awt.event.ActionEvent;
            6 import java.awt.event.ActionListener;
            7 import java.awt.event.WindowAdapter;
            8 import java.awt.event.WindowEvent;
            9 
           10 import javax.swing.BorderFactory;
           11 import javax.swing.JFrame;
           12 import javax.swing.JPanel;
           13 import javax.swing.Timer;
           14 
           15 import org.jfree.chart.ChartPanel;
           16 import org.jfree.chart.JFreeChart;
           17 import org.jfree.chart.axis.DateAxis;
           18 import org.jfree.chart.axis.NumberAxis;
           19 import org.jfree.chart.plot.XYPlot;
           20 import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
           21 import org.jfree.data.time.Millisecond;
           22 import org.jfree.data.time.TimeSeries;
           23 import org.jfree.data.time.TimeSeriesCollection;
           24 import org.jfree.ui.RectangleInsets;
           25 
           26 public class MemoryUsage extends JPanel {
           27 
           28     class DataGenerator extends Timer implements ActionListener {
           29 
           30         /*
           31          * Invoked when an action occurs.
           32          * 
           33          * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
           34          */
           35         public void actionPerformed(ActionEvent actionevent) {
           36             long free = Runtime.getRuntime().freeMemory();
           37             long total = Runtime.getRuntime().totalMemory();
           38             addTotalObservation(total);
           39             addFreeObservation(free);
           40         }
           41 
           42         DataGenerator(int i) {
           43             super(i, null);
           44             addActionListener(this);
           45         }
           46     }
           47 
           48     public MemoryUsage(int maxItemAge) {
           49         super(new BorderLayout());
           50         total = new TimeSeries("Total Memory",
           51                 org.jfree.data.time.Millisecond.class);
           52         total.setMaximumItemAge(maxItemAge);
           53         free = new TimeSeries("Free Memory",
           54                 org.jfree.data.time.Millisecond.class);
           55         free.setMaximumItemAge(maxItemAge);
           56         
           57         TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();        
           58         timeseriescollection.addSeries(total);
           59         timeseriescollection.addSeries(free);
           60         
           61         DateAxis dateaxis = new DateAxis("Time");
           62         NumberAxis numberaxis = new NumberAxis("Memory");        
           63         dateaxis.setTickLabelFont(new Font("SansSerif"012));
           64         numberaxis.setTickLabelFont(new Font("SansSerif"012));
           65         dateaxis.setLabelFont(new Font("SansSerif"014));
           66         numberaxis.setLabelFont(new Font("SansSerif"014));        
           67         dateaxis.setAutoRange(true);
           68         dateaxis.setLowerMargin(0.0D);
           69         dateaxis.setUpperMargin(0.0D);
           70         dateaxis.setTickLabelsVisible(true);
           71         numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
           72         
           73         XYLineAndShapeRenderer xylineandshaperenderer = new XYLineAndShapeRenderer(
           74                 truefalse);
           75         xylineandshaperenderer.setSeriesPaint(0, Color.RED); // 改變第一個Series的顏色
           76         xylineandshaperenderer.setSeriesPaint(1, Color.YELLOW);// 改變第二個Series的顏色
           77         xylineandshaperenderer.setSeriesStroke(0new BasicStroke(1F, 02));
           78         xylineandshaperenderer.setSeriesStroke(1new BasicStroke(1F, 02));
           79         
           80         XYPlot xyplot = new XYPlot(timeseriescollection, dateaxis, numberaxis,
           81                 xylineandshaperenderer);
           82         xyplot.setBackgroundPaint(Color.BLACK); // 改變背景顏色
           83         xyplot.setDomainGridlinePaint(Color.white);
           84         xyplot.setRangeGridlinePaint(Color.white);
           85         xyplot.setAxisOffset(new RectangleInsets(1D, 1D, 1D, 1D));
           86         
           87         JFreeChart jfreechart = new JFreeChart("JVM Memory Usage"new Font(
           88                 "SansSerif"124), xyplot, true);
           89         jfreechart.setBackgroundPaint(Color.white);
           90         
           91         ChartPanel chartpanel = new ChartPanel(jfreechart, true);
           92         chartpanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory
           93                 .createEmptyBorder(10101010), BorderFactory
           94                 .createLineBorder(Color.black)));
           95         
           96         add(chartpanel);
           97     }
           98 
           99     private void addTotalObservation(double d) {
          100         total.add(new Millisecond(), d);
          101     }
          102 
          103     private void addFreeObservation(double d) {
          104         free.add(new Millisecond(), d);
          105     }
          106 
          107     /**
          108      * @param args
          109      */
          110     public static void main(String[] args) {
          111         JFrame jframe = new JFrame("JVM Memory Usage");
          112         MemoryUsage memoryusagedemo = new MemoryUsage(10000);
          113         jframe.getContentPane().add(memoryusagedemo, "Center");
          114         jframe.setBounds(2001201000500);
          115         jframe.setVisible(true);
          116         (memoryusagedemo.new DataGenerator(1000)).start();
          117         jframe.addWindowListener(new WindowAdapter() {
          118             public void windowClosing(WindowEvent windowevent) {
          119                 System.exit(0);
          120             }
          121         });
          122     }
          123 
          124     private TimeSeries total;
          125     private TimeSeries free;
          126 }
          127 

          祝你好運。

          posted on 2009-04-20 17:47 kevin.zhan 閱讀(735) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 闽清县| 隆回县| 黄浦区| 疏勒县| 青冈县| 普陀区| 道孚县| 怀远县| 常德市| 平江县| 蓬莱市| 克拉玛依市| 定襄县| 阳原县| 苍南县| 闽侯县| 哈尔滨市| 嘉荫县| 汉寿县| 万安县| 阳城县| 元氏县| 海晏县| 菏泽市| 海宁市| 滦南县| 德江县| 龙江县| 长沙市| 汉沽区| 汝城县| 三江| 汕头市| 环江| 新巴尔虎左旗| 荃湾区| 内乡县| 彭阳县| 邢台县| 永泰县| 望奎县|