• 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包下载

  • 相关阅读:
    vscode配置c/c++环境
    protobuf简单示例
    heapq.merge()高效合并有序序列
    TCP Server and Client Demo
    golang泛型简介
    context讲解
    go语言range语句中的值的坑
    deque双端队列
    泛型函数
    反射
  • 原文地址:https://www.cnblogs.com/langdangyunliu/p/5603301.html
Copyright © 2020-2023  润新知