idea
jfreechart
生成的图像界面主要是依赖jfreechart来实现,首先得添加jfreechart的依赖包
还需要读取数据库,这里演示的例子采用mysql数据库,所以得添加mysql的连接驱动包
新建数据库表,用来存放数据CREATE TABLE `t_school_info` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `school` varchar(255) DEFAULT NULL COMMENT '学校', `area` varchar(255) DEFAULT NULL COMMENT '地区', `amount` int(11) DEFAULT '0' COMMENT '数量', PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='学校信息表';
添加一些用来测试的数据,可以根据需要自己插入到数据库中
编写查询数据库数据方法,这里只是演示,所以采用最简单的jdbc连接查询数据,如果是正常的项目,可以使用mybatis或者hibernate来做持久化框架查询数据
创建数据集,使用查询数据库的数据,循环组装成JFreeChart需要的数据集
创建JFreeChart对象,设置图表标题、目录轴的显示标签、数值轴的显示标签、数据集、图表方向等,并设置字体和大小
运行之后看效果,效果如下图所示
最后附上完整的测试代码package cn.sw.study.common.test.chart;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartPanel;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.ValueAxis;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PlotOrientation;import org.jfree.data.category.CategoryDataset;import org.jfree.data.category.DefaultCategoryDataset;import javax.swing.*;import java.awt.*;import java.sql.*;import java.util.ArrayList;/** * 测试柱状图 * Created by shaowei on 2017/8/16. */public class TestBarChart { ChartPanel frame; public TestBarChart(){ CategoryDataset dataset = getDataSet(); JFreeChart chart = ChartFactory.createBarChart3D( '学校', // 图表标题 '学校类型', // 目录轴的显示标签 '数量', // 数值轴的显示标签 dataset, // 数据集 PlotOrientation.VERTICAL, // 图表方向:水平、垂直 true, // 是否显示图例(对于简单的柱状图必须是false) false, // 是否生成工具 false // 是否生成URL链接 ); //从这里开始 CategoryPlot plot=chart.getCategoryPlot();//获取图表区域对象 CategoryAxis domainAxis=plot.getDomainAxis(); //水平底部列表 domainAxis.setTickLabelFont(new Font('宋体',Font.BOLD,12)); //垂直标题 domainAxis.setLabelFont(new Font('黑体', Font.BOLD,14)); //水平底部标题 ValueAxis rangeAxis=plot.getRangeAxis();//获取柱状 rangeAxis.setLabelFont(new Font('黑体',Font.BOLD,15)); chart.getLegend().setItemFont(new Font('黑体', Font.BOLD, 15)); chart.getTitle().setFont(new Font('宋体',Font.BOLD,20));//设置标题字体 //到这里结束,虽然代码有点多,但只为一个目的,解决汉字乱码问题 frame=new ChartPanel(chart,true); //这里也可以用chartFrame,可以直接生成一个独立的Frame } private static CategoryDataset getDataSet() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); java.util.List
本例中使用的简单的jdbd连接,如果是正常的项目使用,则需要使用数据库连接池,使用mybatis这样的持久化框架,否则效率和性能会有问题