JFreeChart做的兩個小例子,分別是柱狀圖和動態顯示JVM內存狀況圖

在這裏主要貼上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
這樣就把開發環境配好了,接下來就是創建類文件。先從柱狀圖開始.

import java.io.FileOutputStream;                                                                
                                                                                                
import org.jfree.chart.ChartFactory;                                                            
import org.jfree.chart.ChartUtilities;                                                          
import org.jfree.chart.JFreeChart;                                                              
import org.jfree.chart.plot.PlotOrientation;                                                    
import org.jfree.data.category.CategoryDataset;                                                 
import org.jfree.data.category.DefaultCategoryDataset;                                          
                                                                                                
public class BarChartDemo {                                                                     
    private static String rowKeys[] ={"Apple", "Banana", "Watermelon"};                         
    private static String columnKeys[] ={"Guangzhou", "Shanghai", "Beijing"};                   
    private static String rowKeys_zh_CN[] ={"蘋果", "香蕉", "西瓜"};                            
    private static String columnKeys_zh_CN[] ={"廣州", "上海", "北京"};                         
    /**                                                                                         
     * @param args                                                                              
     */                                                                                         
    public static void main(String[] args) {                                                    
        CategoryDataset dataSet = getComplexDataSet();                                          
        JFreeChart chart = ChartFactory.createBarChart("Fruit Output Chart",// 圖表標題         
                "Fruit",// 目錄軸的顯示標籤                                                     
                "Output",// 數值軸的顯示標籤                                                    
                dataSet,// 數據集                                                               
                PlotOrientation.VERTICAL,// 圖表方向:水平、垂直                                
                true,// 是否顯示圖例(對於簡單的柱狀圖必須是false)                               
                false,// 是否生成工具                                                           
                false// 是否生成URL鏈接                                                         
                );                                                                              
        FileOutputStream fosJPG = null;                                                         
        try {                                                                                   
            fosJPG = new FileOutputStream("D:\\fruit.jpg");                                     
            ChartUtilities.writeChartAsJPEG(fosJPG, chart, 400, 300);                           
        } catch (Exception e) {                                                                 
            e.printStackTrace();                                                                
        } finally {                                                                             
            try {                                                                               
                fosJPG.close();                                                                 
            } catch (Exception e) {                                                             
                e.printStackTrace();                                                            
            }                                                                                   
        }                                                                                       
    }                                                                                           
                                                                                                
    /**                                                                                         
     * 獲取一個演示用的簡單數據集對象                                                           
     *                                                                                          
     * @return                                                                                  
     */                                                                                         
    private static CategoryDataset getDataSet() {                                               
        DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();                  
        categoryDataset.addValue(100, "", rowKeys[0]);                                          
        categoryDataset.addValue(200, "", rowKeys[1]);                                          
        categoryDataset.addValue(300, "", rowKeys[2]);                                          
        return categoryDataset;                                                                 
    }                                                                                           
                                                                                                
    /**                                                                                         
     * 獲取一個演示用的組合數據集對象                                                           
     *                                                                                          
     * @return                                                                                  
     */                                                                                         
    private static CategoryDataset getComplexDataSet() {                                        
        DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();                  
        categoryDataset.addValue(100, columnKeys[0], rowKeys[0]);                               
        categoryDataset.addValue(110, columnKeys[1], rowKeys[0]);                               
        categoryDataset.addValue(120, columnKeys[2], rowKeys[0]);                               
        categoryDataset.addValue(200, columnKeys[0], rowKeys[1]);                               
        categoryDataset.addValue(210, columnKeys[1], rowKeys[1]);                               
        categoryDataset.addValue(220, columnKeys[2], rowKeys[1]);                               
        categoryDataset.addValue(300, columnKeys[0], rowKeys[2]);                               
        categoryDataset.addValue(310, columnKeys[1], rowKeys[2]);                               
        categoryDataset.addValue(320, columnKeys[2], rowKeys[2]);                               
        return categoryDataset;                                                                 
    }                                                                                           
}                                                                                               
                                                                                                

 

 

運行後,可看到結果了。
接着下來是動態顯示JVM內存狀況圖的原碼.

import java.awt.BasicStroke;                                                                      
import java.awt.BorderLayout;                                                                     
import java.awt.Color;                                                                            
import java.awt.Font;                                                                             
import java.awt.event.ActionEvent;                                                                
import java.awt.event.ActionListener;                                                             
import java.awt.event.WindowAdapter;                                                              
import java.awt.event.WindowEvent;                                                                
                                                                                                  
import javax.swing.BorderFactory;                                                                 
import javax.swing.JFrame;                                                                        
import javax.swing.JPanel;                                                                        
import javax.swing.Timer;                                                                         
                                                                                                  
import org.jfree.chart.ChartPanel;                                                                
import org.jfree.chart.JFreeChart;                                                                
import org.jfree.chart.axis.DateAxis;                                                             
import org.jfree.chart.axis.NumberAxis;                                                           
import org.jfree.chart.plot.XYPlot;                                                               
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;                                        
import org.jfree.data.time.Millisecond;                                                           
import org.jfree.data.time.TimeSeries;                                                            
import org.jfree.data.time.TimeSeriesCollection;                                                  
import org.jfree.ui.RectangleInsets;                                                              
                                                                                                  
public class MemoryUsage extends JPanel {                                                         
                                                                                                  
    class DataGenerator extends Timer implements ActionListener {                                 
                                                                                                  
        /*                                                                                        
         * Invoked when an action occurs.                                                         
         *                                                                                        
         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)         
         */                                                                                       
        public void actionPerformed(ActionEvent actionevent) {                                    
            long free = Runtime.getRuntime().freeMemory();                                        
            long total = Runtime.getRuntime().totalMemory();                                      
            addTotalObservation(total);                                                           
            addFreeObservation(free);                                                             
        }                                                                                         
                                                                                                  
        DataGenerator(int i) {                                                                    
            super(i, null);                                                                       
            addActionListener(this);                                                              
        }                                                                                         
    }                                                                                             
                                                                                                  
    public MemoryUsage(int maxItemAge) {                                                          
        super(new BorderLayout());                                                                
        total = new TimeSeries("Total Memory",                                                    
                org.jfree.data.time.Millisecond.class);                                           
        total.setMaximumItemAge(maxItemAge);                                                      
        free = new TimeSeries("Free Memory",                                                      
                org.jfree.data.time.Millisecond.class);                                           
        free.setMaximumItemAge(maxItemAge);                                                       
                                                                                                  
        TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();                   
        timeseriescollection.addSeries(total);                                                    
        timeseriescollection.addSeries(free);                                                     
                                                                                                  
        DateAxis dateaxis = new DateAxis("Time");                                                 
        NumberAxis numberaxis = new NumberAxis("Memory");                                         
        dateaxis.setTickLabelFont(new Font("SansSerif", 0, 12));                                  
        numberaxis.setTickLabelFont(new Font("SansSerif", 0, 12));                                
        dateaxis.setLabelFont(new Font("SansSerif", 0, 14));                                      
        numberaxis.setLabelFont(new Font("SansSerif", 0, 14));                                    
        dateaxis.setAutoRange(true);                                                              
        dateaxis.setLowerMargin(0.0D);                                                            
        dateaxis.setUpperMargin(0.0D);                                                            
        dateaxis.setTickLabelsVisible(true);                                                      
        numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());                     
                                                                                                  
        XYLineAndShapeRenderer xylineandshaperenderer = new XYLineAndShapeRenderer(               
                true, false);                                                                     
        xylineandshaperenderer.setSeriesPaint(0, Color.RED); // 改變第一個Series的顏色            
        xylineandshaperenderer.setSeriesPaint(1, Color.YELLOW);// 改變第二個Series的顏色          
        xylineandshaperenderer.setSeriesStroke(0, new BasicStroke(1F, 0, 2));                     
        xylineandshaperenderer.setSeriesStroke(1, new BasicStroke(1F, 0, 2));                     
                                                                                                  
        XYPlot xyplot = new XYPlot(timeseriescollection, dateaxis, numberaxis,                    
                xylineandshaperenderer);                                                          
        xyplot.setBackgroundPaint(Color.BLACK); // 改變背景顏色                                   
        xyplot.setDomainGridlinePaint(Color.white);                                               
        xyplot.setRangeGridlinePaint(Color.white);                                                
        xyplot.setAxisOffset(new RectangleInsets(1D, 1D, 1D, 1D));                                
                                                                                                  
        JFreeChart jfreechart = new JFreeChart("JVM Memory Usage", new Font(                      
                "SansSerif", 1, 24), xyplot, true);                                               
        jfreechart.setBackgroundPaint(Color.white);                                               
                                                                                                  
        ChartPanel chartpanel = new ChartPanel(jfreechart, true);                                 
        chartpanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory                     
                .createEmptyBorder(10, 10, 10, 10), BorderFactory                                 
                .createLineBorder(Color.black)));                                                 
                                                                                                  
        add(chartpanel);                                                                          
    }                                                                                             
                                                                                                  
    private void addTotalObservation(double d) {                                                  
        total.add(new Millisecond(), d);                                                          
    }                                                                                             
                                                                                                  
    private void addFreeObservation(double d) {                                                   
        free.add(new Millisecond(), d);                                                           
    }                                                                                             
                                                                                                  
    /**                                                                                           
     * @param args                                                                                
     */                                                                                           
    public static void main(String[] args) {                                                      
        JFrame jframe = new JFrame("JVM Memory Usage");                                           
        MemoryUsage memoryusagedemo = new MemoryUsage(10000);                                     
        jframe.getContentPane().add(memoryusagedemo, "Center");                                   
        jframe.setBounds(200, 120, 1000, 500);                                                    
        jframe.setVisible(true);                                                                  
        (memoryusagedemo.new DataGenerator(1000)).start();                                        
        jframe.addWindowListener(new WindowAdapter() {                                            
            public void windowClosing(WindowEvent windowevent) {                                  
                System.exit(0);                                                                   
            }                                                                                     
        });                                                                                       
    }                                                                                             
                                                                                                  
    private TimeSeries total;                                                                     
    private TimeSeries free;                                                                      
}                                                                                                 
                                                                                                  

發佈了11 篇原創文章 · 獲贊 7 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章