10.JFreeChart数据库接口

本文介绍如何使用JFreeChart从数据库读取数据并创建条形图和保存为图像文件。通过Java代码示例,展示了从MySQL数据库中获取学生信息,并利用JFreeChart的图表工厂创建垂直条形图,最后将图表展示在Swing应用中或保存为JPG和PNG格式。

本文链接:https://blog.youkuaiyun.com/cnds123321/article/details/89600709

目录链接:https://blog.youkuaiyun.com/cnds123321/article/details/89600379

从数据库表中读取简单的数据,然后 JFreeChart 使用这些数据来创建图表。

10.1 测试数据

10.2 基于swing的应用

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
​
import javax.swing.*;
import java.io.IOException;
import java.sql.*;
​
public class LineChart {
    public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
​
        //连接数据库
        Class.forName("com.mysql.jdbc.Driver");
        String url="jdbc:mysql://localhost:3306/myDB";
        String username="root";
        String password="admin";
        Connection con= DriverManager.getConnection(url,username,password);
        Statement statement=con.createStatement();
        ResultSet rs=statement.executeQuery("select name,age from Students");
        //创建数据集
        DefaultCategoryDataset dataset=new DefaultCategoryDataset();
        while(rs.next()){
            dataset.setValue(
                    rs.getInt("age"),
                    "年龄",
                    rs.getString("name")
            );
        }
​
        // 创建简单的条形图
        JFreeChart freeChart=ChartFactory.createBarChart(
                "学生信息",// 图表标题
                "姓名",
                "年龄",
                dataset,//数据集,即要显示在图表上的数据
                PlotOrientation.VERTICAL,
                true,//是否显示图例
                false,//是否显示提示
                false//是否生成URL连接
        );
​
        //以面板显示,创建一个图表面板
        ChartPanel chartPanel=new ChartPanel(freeChart);
        //设置大小
        chartPanel.setPreferredSize(new java.awt.Dimension(560,400));
​
        //创建一个主窗口来显示面板
        JFrame frame=new JFrame("条形图");
        frame.setLocation(500,400);
        frame.setSize(600,500);
​
        //将图表面板设置为主窗口的内容面板
        frame.setContentPane(chartPanel);
​
        //显示主窗口
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

结果展示:

10.3 创建图像

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.DefaultCategoryDataset;
​
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.*;
​
public class Chart {
    public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
​
        //连接数据库
        Class.forName("com.mysql.jdbc.Driver");
        String url="jdbc:mysql://localhost:3306/myDB";
        String username="root";
        String password="admin";
        Connection con= DriverManager.getConnection(url,username,password);
        Statement statement=con.createStatement();
        ResultSet rs=statement.executeQuery("select name,age from Students");
        //创建数据集
        DefaultCategoryDataset dataset=new DefaultCategoryDataset();
        while(rs.next()){
            dataset.setValue(
                    rs.getInt("age"),
                    "年龄",
                    rs.getString("name")
            );
        }
​
        // 创建简单的条形图
        JFreeChart freeChart=ChartFactory.createBarChart(
                "学生信息",// 图表标题
                "姓名",
                "年龄",
                dataset,//数据集,即要显示在图表上的数据
                PlotOrientation.VERTICAL,
                true,//是否显示图例
                false,//是否显示提示
                false//是否生成URL连接
        );
​
        //使用输出流输出图表文件
        //输出JPG文件
        OutputStream os=new FileOutputStream("c:/picture.jpg");
        ChartUtilities.writeChartAsJPEG(os,freeChart,500,500);
        //输出PNG文件
        OutputStream os_png=new FileOutputStream("c:/pictrue_png.png");
        ChartUtilities.writeChartAsPNG(os_png,freeChart,500,500);
    }
}

结果展示:

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值