ZK 使用jfreeChart

前台:

<?page title="Grid使用" contentType="text/html;charset=UTF-8"?>
<zk xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns="http://www.zkoss.org/2005/zul" 
        xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul">
    
<window border="none" apply="test.GrdiCtrl">
        <grid  >
            <columns sizable="true" >
                <column label="图表" align="center" />
            </columns>
            <rows id="rows">
                
            </rows>
        </grid>

</window>
</zk>
View Code

后台:

package test;

import java.awt.Color;
import java.awt.Font;
import java.awt.Paint;
import java.util.Random;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.util.GenericAutowireComposer;
import org.zkoss.zul.CategoryModel;
import org.zkoss.zul.Cell;
import org.zkoss.zul.Chart;
import org.zkoss.zul.PieModel;
import org.zkoss.zul.Row;
import org.zkoss.zul.Rows;
import org.zkoss.zul.SimpleCategoryModel;
import org.zkoss.zul.SimplePieModel;

import chart.LineChartEngine;
import chart.TestEngine;

public class GrdiCtrl extends GenericAutowireComposer<Component>{

    private static final long serialVersionUID = 1L;
    
    // colors
    public static Color COLOR_1 = new Color(0x38EB38);
    public static Color COLOR_2 = new Color(0xFE9900); 
    public static Color COLOR_3 = new Color(0xEF6AD5); 
    public static Color COLOR_4 = new Color(0xFFFF00);  
    public static Color COLOR_5 = new Color(0x66CBFF); 
    public static Color COLOR_6 = new Color(0x9FFE80); 
      
    private static Paint[] colors1 = new Paint[]{COLOR_2, COLOR_1};  
    
    private Rows rows;
    
    @Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);
        
        rows.appendChild(addRow());
    }
    
    private Row addRow() {
        int count = 1;
        Row row = new Row();
        
        //饼状图
        Chart mychart1 = new Chart();
        
        PieModel model = new SimplePieModel();
        model.setValue("已使用", new Double(2.0));
        model.setValue("未使用", new Double(3.0));
         

        TestEngine engine1 = new TestEngine();
        engine1.setColors(colors1);
        mychart1.setModel(model);
        mychart1.setEngine(engine1);
         
        mychart1.setId("chart" + (3*count+1));
        
        mychart1.setWidth("250px");
        mychart1.setHeight("125px");
        
        Cell cell2 = new Cell();
        cell2.appendChild(mychart1);
            
        //折线图
        CategoryModel model1 = new SimpleCategoryModel();
        Chart linechart1 =  new Chart();
        linechart1.setType("line");
        linechart1.setHeight("250px");
        linechart1.setWidth("500px");
        linechart1.setThreeD(false);
        linechart1.setFgAlpha(128);
        
        model1.setValue("CPU使用率", "Category 1", 10 * new Random().nextInt(7));
        model1.setValue("CPU使用率", "Category 2", 10 * new Random().nextInt(7));
        model1.setValue("CPU使用率", "Category 3", 10 * new Random().nextInt(7));
        model1.setValue("CPU使用率", "Category 4", 10 * new Random().nextInt(7));
        model1.setValue("CPU使用率", "Category 5", 10 * new Random().nextInt(7));
        
        model1.setValue("CPU使用率2", "Category 1", 10 * new Random().nextInt(7));
        model1.setValue("CPU使用率2", "Category 2", 10 * new Random().nextInt(7));
        model1.setValue("CPU使用率2", "Category 3", 10 * new Random().nextInt(7));
        model1.setValue("CPU使用率2", "Category 4", 10 * new Random().nextInt(7));
        model1.setValue("CPU使用率2", "Category 5", 10 * new Random().nextInt(7));
        
        linechart1.setModel(model1);
        LineChartEngine lce = new LineChartEngine(2,5);
        lce.setMaxRange(100);
        linechart1.setEngine(lce);
        Font titlefont = new Font("黑体", Font.PLAIN, 12);
         
        linechart1.setTitle("CPU(%)");//设置top标题
        
        Font subfont = new Font("黑体", Font.PLAIN, 12);
        linechart1.setYAxisFont(subfont);//设置字体,防中文乱码
        linechart1.setYAxis("数值");//设置left标题
        
        Cell cell3 = new Cell();
        cell3.appendChild(linechart1);
        //
        linechart1.setXAxis("08                 09                 10                 11                 12");
        //Font f = new Font("Serif",Font.PLAIN,11);
        //linechart1.setXAxisFont(f);
        linechart1.setTitleFont(titlefont);
        
        row.appendChild(cell2);
        row.appendChild(cell3);
        
        row.setStyle("background:#ffffff");
        return row;
    }
    
}
View Code

饼图引擎:

package com.zk.ctrl.chart;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Paint;
import java.awt.Shape;
import java.awt.Stroke;

import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.DefaultDrawingSupplier;
import org.jfree.chart.plot.PiePlot;
import org.zkoss.zkex.zul.impl.JFreeChartEngine;
import org.zkoss.zul.Chart;

public class TestEngine extends JFreeChartEngine {

    private static final long serialVersionUID = 1L;

    Paint[] colors;

    public Paint[] getColors() {
        return colors;
    }

    public void setColors(Paint[] colors) {
        this.colors = colors;
    }

    public boolean prepareJFreeChart(JFreeChart jfchart, Chart chart) {
        jfchart.setBorderPaint(Color.white);
        jfchart.setBorderVisible(true);
        Stroke s = new BasicStroke(10.0f);
        jfchart.setBorderStroke(s);

        PiePlot piePlot = (PiePlot) jfchart.getPlot();
        // 璁剧疆鑳屾櫙閫忔槑搴?
        piePlot.setBackgroundAlpha(1.0f);

        piePlot.setBaseSectionOutlinePaint(new Color(0xEEEEEE));
        piePlot.setSectionOutlinesVisible(false);
        piePlot.setLabelBackgroundPaint(Color.WHITE);
        piePlot.setLabelOutlinePaint(null);
        piePlot.setLabelShadowPaint(null);
        Font axisFont = new Font("榛戜綋", Font.PLAIN, 12);
        jfchart.getLegend().setVisible(false);
        piePlot.setLabelFont(axisFont);

        piePlot.setOutlinePaint(null);

        // override some default colors
        DefaultDrawingSupplier defaults = new DefaultDrawingSupplier();
        piePlot.setDrawingSupplier(new DefaultDrawingSupplier(colors, 
                new Paint[] { defaults.getNextFillPaint() },//
                new Paint[] { defaults.getNextOutlinePaint() }, //
                new Stroke[] { defaults.getNextStroke() },//
                new Stroke[] { defaults.getNextOutlineStroke() },//
                new Shape[] { defaults.getNextShape() }));//

        piePlot.setShadowPaint(Color.white); //
        piePlot.setSectionOutlinesVisible(false);

        return false;
    }
}
View Code

拆线图引擎

package chart;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;

import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.TextAnchor;
import org.zkoss.zkex.zul.impl.JFreeChartEngine;
import org.zkoss.zul.Chart;

public class LineChartEngine extends JFreeChartEngine {

    private static final long serialVersionUID = 1L;

    private int width = 5;
    private boolean showLine = true;
    private boolean showShape = true;
    private int series;
    private int total;

    public LineChartEngine() {

    }

    public LineChartEngine(int series, int total) {
        this.series = series;
        this.total = total;
    }

    public float minRange = 0.0f;
    public float maxRange = 100.0f;

    public boolean prepareJFreeChart(JFreeChart jfchart, Chart chart) {
        jfchart.setBackgroundPaint(Color.WHITE);
        TextTitle subtitle = new TextTitle("2007年度", new Font("黑体", Font.BOLD, 12));
        jfchart.addSubtitle(subtitle);
        jfchart.setBorderStroke(null);
        
        CategoryPlot plot = (CategoryPlot) jfchart.getPlot();

        plot.setDomainGridlinePaint(Color.LIGHT_GRAY);
        plot.setRangeGridlinePaint(Color.LIGHT_GRAY);
        plot.setBackgroundPaint(Color.WHITE);
        plot.setOutlinePaint(Color.RED);// 边界线

        LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();

        CategoryPlot plot1 = jfchart.getCategoryPlot();

        plot1.setDomainGridlinesVisible(true);
        plot1.setRangeGridlinesVisible(true);
        plot1.setBackgroundPaint(Color.green);
        // 设置曲线图与xy轴的距离
        plot1.setAxisOffset(new RectangleInsets(0d, 0d, 0d, 0d));
        plot.setAxisOffset(new RectangleInsets(0d, 0d, 0d, 0d));

        Font font = new Font("宋体", Font.PLAIN, 10);
        CategoryAxis categoryAxis = (CategoryAxis) plot1.getDomainAxis();
        categoryAxis.setTickLabelFont(font);
        // Y轴
        NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis();
        numberaxis.setTickUnit(new NumberTickUnit(2D));
        // numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        // 横轴
        CategoryAxis dateaxis = (CategoryAxis) plot.getDomainAxis();
        dateaxis.setMinorTickMarksVisible(false);
        Font f = new Font("Serif", Font.PLAIN, 1);
        plot.getDomainAxis().setTickLabelFont(f);
        // plot.getDomainAxis(
        // dateaxis.sett
        numberaxis.setAutoRangeIncludesZero(true);
        numberaxis.setAutoTickUnitSelection(true);
        // numberaxis.setAutoRangeMinimumSize(0.01f);
        numberaxis.setRange(minRange, maxRange);
        // //获取同网卡的读或写
        // int num=0;
        // if(series>=total/2){
        // num=series-total/2;
        // }else{
        // num=series+total/2;
        // }
        if (series >= 0) {
            if (series >= total / 2) {
                renderer.setSeriesLinesVisible(1, showLine);// 是否显示数据点连线
                renderer.setSeriesShapesVisible(1, showShape);// 是否显示数据节点
                renderer.setLegendTextFont(1, font);
                renderer.setSeriesStroke(1, new BasicStroke(width));

                renderer.setSeriesLinesVisible(0, showLine);// 0123,4567
                renderer.setSeriesShapesVisible(0, showShape);
                renderer.setLegendTextFont(0, font);
                renderer.setSeriesStroke(0, new BasicStroke(1));
            } else {
                renderer.setSeriesLinesVisible(0, showLine);// 0123,4567
                renderer.setSeriesShapesVisible(0, showShape);
                renderer.setLegendTextFont(0, font);
                renderer.setSeriesStroke(0, new BasicStroke(width));

                renderer.setSeriesLinesVisible(1, showLine);// 0123,4567
                renderer.setSeriesShapesVisible(1, showShape);
                renderer.setLegendTextFont(1, font);
                renderer.setSeriesStroke(1, new BasicStroke(1));
            }

        }

        // 显示数据点数值
        renderer.setBaseShapesVisible(true);
        renderer.setBaseItemLabelsVisible(true);
        renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,
                TextAnchor.BASELINE_LEFT));
        renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
        renderer.setBaseItemLabelFont(new Font("宋体", 5, 12));
        // for (int i = 0; i < total; i++) {
        // if(i==series||i==num){
        // continue;
        // }
        // renderer.setSeriesStroke(i, new BasicStroke(1));//设置线条粗细
        // renderer.setSeriesShapesVisible(i, showShape);//数据点不可见
        // renderer.setSeriesVisibleInLegend(i, false);//设置线条的图例不可见
        // renderer.setLegendTextFont(i, font);//设置图例字体样式
        // renderer.setSeriesLinesVisible(i, false);//曲线是否可见
        // }
        return false;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public void setShowLine(boolean showLine) {
        this.showLine = showLine;
    }

    public void setShowShape(boolean showShape) {
        this.showShape = showShape;
    }

    public void setMinRange(float minRange) {
        this.minRange = minRange;
    }

    public void setMaxRange(float maxRange) {
        this.maxRange = maxRange;
    }
}
View Code

效果图:

jar包下载

原文地址:https://www.cnblogs.com/langdangyunliu/p/5603301.html