首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

jfreechart兑现柱状图排序

2012-10-27 
jfreechart实现柱状图排序今天在网上查了一下,没有发现 Jfreechart柱状图排序的实现方法,也还没来得及研究

jfreechart实现柱状图排序
     今天在网上查了一下,没有发现 Jfreechart柱状图排序的实现方法,也还没来得及研究Jfreechart的代码和文档,所以就自己实现了一下。可能jfreechart自身有这个功能,可是发现以前的这个功能无效了,不知道用什么新方法实现这个功能了,所以只好自己实现了。
     

package my;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.GradientPaint;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.Iterator;import java.util.List;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartPanel;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.renderer.category.BarRenderer;import org.jfree.data.category.CategoryDataset;import org.jfree.data.category.DefaultCategoryDataset;import org.jfree.ui.ApplicationFrame;import org.jfree.ui.RefineryUtilities;/** * jfreechart排序柱状图. */public class MyBarPic extends ApplicationFrame {    /**     *      * 构造函数,进行初始化操作     *     * @param title  the frame title.     */    public MyBarPic(String title) {        super(title);        CategoryDataset dataset = createDataset();        JFreeChart chart = createChart(dataset);        ChartPanel chartPanel = new ChartPanel(chart, false);        chartPanel.setPreferredSize(new Dimension(500, 270));        setContentPane(chartPanel);        saveAsFile(chart, "D:\\图\\第一.jpg", 430, 200);    }    /** * 生成数据集 *  * @return */private static CategoryDataset createDataset() {/** *  * 数据集数据存放对象 *  * @author newlife111 * */class ThreeData  implements Comparator{String rowKey;//行标签String colKey;//列标签double value;//值ThreeData(){}ThreeData(double value, String rowKey, String colKey){this.value = value;this.rowKey = rowKey;this.colKey = colKey;}/* * 比较的算法 */public int compare(Object obj1, Object obj2) {double valueTmp = ((ThreeData)obj1).value - ((ThreeData)obj2).value;return valueTmp > 0 ? -1 : (valueTmp < 0 ? 1 : 0); }}/* * 存放数据 */List list = new ArrayList();list.add(new ThreeData(100.00d, "xx", "苹\n果"));list.add(new ThreeData(200.00d, "xx", "葡\n萄"));list.add(new ThreeData(50.00d, "xx", "雪\n梨"));list.add(new ThreeData(24.00d, "xx", "香\n蕉"));list.add(new ThreeData(65.00d, "xx", "橘\n子"));list.add(new ThreeData(125.00d, "xx", "柑\n橘"));list.add(new ThreeData(198.00d, "xx", "柚\n子"));list.add(new ThreeData(160.00d, "xx", "草\n莓"));//进行排序Collections.sort(list,new ThreeData());/* * 添加数据进数据集 */DefaultCategoryDataset dataset = new DefaultCategoryDataset();Iterator iter = list.iterator();while(iter.hasNext()) {ThreeData threeDataTmp = (ThreeData)iter.next();dataset.addValue(threeDataTmp.value, threeDataTmp.rowKey, threeDataTmp.colKey);}return dataset;}    /**     * 生成图片.     *     * @param dataset  数据集.     *     * @return chart 图片对象     */    private static JFreeChart createChart(CategoryDataset dataset) {        JFreeChart chart = ChartFactory.createBarChart(            "xxx",       // 图片标题            "xxx",               // 横轴标题            "xxx",                  // 纵轴标题            dataset,                  // 数据集            PlotOrientation.VERTICAL, // 图形方向            true,                     // 是否legend            true,                     // 图形提示            false                     // 图形url        );        //设置图片背景色        chart.setBackgroundPaint(Color.white);        //获得数据区对象        CategoryPlot plot = (CategoryPlot) chart.getPlot();        //设置图形背景色        plot.setBackgroundPaint(Color.white);        //横轴网格显示        plot.setDomainGridlinesVisible(true);        //横轴网格颜色        plot.setRangeGridlinePaint(Color.black);                /*         * 图形相关设置         */                BarRenderer renderer = (BarRenderer) plot.getRenderer();        renderer.setDrawBarOutline(false);        renderer.setBaseItemLabelFont(new Font("黑体", Font.BOLD, 12));        renderer.setBaseLegendTextFont(new Font("Simsun", 0, 10));        renderer.setBaseItemLabelsVisible(true);        renderer.setMaximumBarWidth(0.05f);        renderer.setDrawBarOutline(false);        renderer.setShadowVisible(false);                /*         * 纵轴相关设置         */        final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());        rangeAxis.setLabelFont(new Font("Simsun", 0, 12));        /*         * 图形1颜色设置         */        GradientPaint gp0 = new GradientPaint(0.5f, 0.5f, new Color(100,100,255),                0.0f, 0.0f, new Color(0, 0, 64));        renderer.setSeriesPaint(0, gp0);                /*         * 横轴相关设置         */        CategoryAxis domainAxis = plot.getDomainAxis();        domainAxis.setLabelFont(new Font("Simsun", Font.BOLD, 12));        //Font.BOLD字符加粗可使标签显示清楚些        domainAxis.setTickLabelFont(new Font("Simsun", Font.BOLD, 8));        domainAxis.setLowerMargin(0.03f);        //这里设置横轴标签可显示行数,在数据集的横轴字符串上用\n可实现标签字符垂直        domainAxis.setMaximumCategoryLabelLines(255);        domainAxis.setCategoryLabelPositionOffset(3);        return chart;    }    /**     * 程序入口     *     * @param args       */    public static void main(String[] args) {        MyBarPic demo = new MyBarPic("FirstPic");        demo.pack();        RefineryUtilities.centerFrameOnScreen(demo);        demo.setVisible(true);    }    /** *  * 保存为文件 *  * @param chart 图片对象 * @param outputPath 保存路径 * @param weight 宽 * @param height 高 */public static void saveAsFile(JFreeChart chart, String outputPath,int weight, int height) {FileOutputStream out = null;try {File outFile = new File(outputPath);if (!outFile.getParentFile().exists()) {outFile.getParentFile().mkdirs();}out = new FileOutputStream(outputPath);//保存为JPEGChartUtilities.writeChartAsJPEG(out,chart,800,600);out.flush();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (out != null) {try {out.close();} catch (IOException e) {}}}}}

热点排行