基于jfreechart生成曲线、柱状等图片并展示到JSP

生成曲线、柱状图等图片并展示到 JSP 页面是很常见的需求,而 JFreeChart 是一款 Java 的图表组件库,可以帮助我们轻松地生成各种类型的图表。下面是基于 JFreeChart 生成曲线、柱状等图片并展示到 JSP 的攻略:

1. 引入 JFreeChart 库和相关依赖

在项目中引入 JFreeChart 库和相关依赖。可以在 Maven 项目中添加以下依赖:

<dependency>
    <groupId>jfree</groupId>
    <artifactId>jfreechart</artifactId>
    <version>1.5.1</version>
</dependency>
<dependency>
    <groupId>org.jfree</groupId>
    <artifactId>jcommon</artifactId>
    <version>1.0.24</version>
</dependency>

2. 生成图表对象

使用 JFreeChart,首先需要生成一个图表对象。根据需要生成不同的图表类型,这里以 XY 曲线图和柱状图为例。

2.1 XY 曲线图

// 生成 XYDataset 数据集
XYSeries series = new XYSeries("Data");
series.add(1, 1);
series.add(2, 3);
series.add(3, 2);
XYDataset dataset = new XYSeriesCollection(series);

// 生成 XY 曲线图对象
JFreeChart chart = ChartFactory.createXYLineChart(
        "XY Line Chart",
        "X",
        "Y",
        dataset,
        PlotOrientation.VERTICAL,
        true,
        true,
        false
);

2.2 柱状图

// 生成 CategoryDataset 数据集
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(10, "Row 1", "Column 1");
dataset.addValue(20, "Row 1", "Column 2");
dataset.addValue(30, "Row 1", "Column 3");
dataset.addValue(40, "Row 2", "Column 1");
dataset.addValue(50, "Row 2", "Column 2");
dataset.addValue(60, "Row 2", "Column 3");

// 生成柱状图对象
JFreeChart chart = ChartFactory.createBarChart(
        "Bar Chart",
        "Category",
        "Value",
        dataset,
        PlotOrientation.VERTICAL,
        true,
        true,
        false
);

3. 将图表生成为图片并保存

// 生成 ChartPanel 对象
ChartPanel chartPanel = new ChartPanel(chart);

// 将图表生成为图片并保存
File file = new File("chart.png");
ChartUtilities.saveChartAsPNG(file, chart, 400, 300);

4. 在 JSP 页面中展示生成的图片

使用 JSP 展示生成的图片,可以在 JSP 中使用 <img> 标签引入图片。需要将图片保存到 web 工程的根目录或子目录下,然后在 JSP 中使用相对路径访问。

下面是一个简单的示例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Chart Demo</title>
</head>
<body>
    <h1>XY Line Chart</h1>
    <img src="chart.png" alt="XY Line Chart"/>
</body>
</html>

5. 完整示例

下面是一个完整的示例,展示如何生成 XY 曲线图和柱状图,并将它们保存为图片并在 JSP 中展示。

5.1 生成 XY 曲线图并保存

import java.io.File;
import java.io.IOException;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class XYLineChartDemo extends ApplicationFrame {

    public XYLineChartDemo(String title) {
        super(title);
        ChartPanel chartPanel = createChartPanel();
        chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
        setContentPane(chartPanel);
    }

    private ChartPanel createChartPanel() {
        // 生成 XYDataset 数据集
        XYSeries series = new XYSeries("Data");
        series.add(1, 1);
        series.add(2, 3);
        series.add(3, 2);
        XYDataset dataset = new XYSeriesCollection(series);

        // 生成 XY 曲线图对象
        JFreeChart chart = ChartFactory.createXYLineChart(
                "XY Line Chart",
                "X",
                "Y",
                dataset,
                PlotOrientation.VERTICAL,
                true,
                true,
                false
        );

        // 将图表生成为图片并保存
        File file = new File("xy-line-chart.png");
        try {
            ChartUtilities.saveChartAsPNG(file, chart, 500, 300);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 生成 ChartPanel 对象
        ChartPanel chartPanel = new ChartPanel(chart);
        return chartPanel;
    }

    public static void main(String[] args) {
        XYLineChartDemo demo = new XYLineChartDemo("XY Line Chart Demo");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);
    }

}

5.2 生成柱状图并保存

import java.io.File;
import java.io.IOException;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class BarChartDemo extends ApplicationFrame {

    public BarChartDemo(String title) {
        super(title);
        ChartPanel chartPanel = createChartPanel();
        chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
        setContentPane(chartPanel);
    }

    private ChartPanel createChartPanel() {
        // 生成 CategoryDataset 数据集
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(10, "Row 1", "Column 1");
        dataset.addValue(20, "Row 1", "Column 2");
        dataset.addValue(30, "Row 1", "Column 3");
        dataset.addValue(40, "Row 2", "Column 1");
        dataset.addValue(50, "Row 2", "Column 2");
        dataset.addValue(60, "Row 2", "Column 3");

        // 生成柱状图对象
        JFreeChart chart = ChartFactory.createBarChart(
                "Bar Chart",
                "Category",
                "Value",
                dataset,
                PlotOrientation.VERTICAL,
                true,
                true,
                false
        );

        // 将图表生成为图片并保存
        File file = new File("bar-chart.png");
        try {
            ChartUtilities.saveChartAsPNG(file, chart, 500, 300);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 生成 ChartPanel 对象
        ChartPanel chartPanel = new ChartPanel(chart);
        return chartPanel;
    }

    public static void main(String[] args) {
        BarChartDemo demo = new BarChartDemo("Bar Chart Demo");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);
    }

}

5.3 在 JSP 中展示图片

将生成的图片保存到 web 工程的根目录下,然后在 JSP 中使用相对路径访问。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Chart Demo</title>
</head>
<body>
    <h1>XY Line Chart</h1>
    <img src="${pageContext.request.contextPath}/xy-line-chart.png" alt="XY Line Chart"/>
    <h1>Bar Chart</h1>
    <img src="${pageContext.request.contextPath}/bar-chart.png" alt="Bar Chart"/>
</body>
</html>

在浏览器中访问 JSP 页面,就可以看到生成的 XY 曲线图和柱状图了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于jfreechart生成曲线、柱状等图片并展示到JSP - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • SpringSecurity框架简介及与shiro特点对比

    SpringSecurity框架简介及与shiro特点对比 1. Spring Security框架简介 Spring Security是一个基于Spring框架的安全框架,它提供了声明式的安全访问控制解决方案,支持基于Role的访问控制、基于ACL的访问控制,以及对Web应用安全的全面支持。 Spring Security可以轻松地与Spring框架集成,…

    Java 2023年5月20日
    00
  • javaweb实战之商城项目开发(二)

    《javaweb实战之商城项目开发(二)》是一篇介绍如何开发一个完整的商城网站的教程,其中包含了从前台页面设计到后台数据管理等方面的内容。 在开发商城项目时,我们需要先进行项目规划和技术选型,如需使用框架,我们可以选择Spring MVC、Spring Boot等常用的框架。在规划完整个项目后,我们需要完成数据库的设计和表的创建。商城项目通常需要的功能包括商…

    Java 2023年5月23日
    00
  • InputStreamReader和BufferedReader用法及实例讲解

    InputStreamReader和BufferedReader用法及实例讲解 在Java中,读取文件或者网络数据时,我们通常会用到InputStreamReader和BufferedReader这两个类。InputStreamReader是将字节流转换成字符流,而BufferedReader则是为了加速读取字符流而存在的。下面我们将逐步讲解这两个类的用法及…

    Java 2023年5月20日
    00
  • 详解Java中JSON数据的生成与解析

    详解Java中JSON数据的生成与解析 JSON数据格式现在已经成为了网络数据交换的标准之一,Java作为一门主流语言,当然也提供了很好的生成和解析JSON数据的库。下面我们来详细讲解如何在Java中生成和解析JSON数据。 JSON数据的生成 Java提供了许多第三方库用于生成JSON数据,其中Jackson库是比较常用的一种,我们就以这个库为例来讲解如何…

    Java 2023年5月26日
    00
  • Java线程间共享实现方法详解

    Java线程间共享实现方法详解 什么是线程间共享 在Java中,线程是运行在同一个进程中的多个子任务。这些子任务可以共享代码、数据和资源。线程间共享就是指多个线程访问同一个数据和资源的过程。 在多线程编程中,线程间共享常用于实现任务之间的通信和协作,例如,生产者消费者模式、读写锁等场景。 线程间共享实现方法 Java提供了多种实现线程间共享的方式,常用的包括…

    Java 2023年5月19日
    00
  • SpringBoot Starter依赖原理与实例详解

    SpringBoot Starter依赖原理与实例详解 在SpringBoot中,我们可以使用Starter依赖来简化项目的依赖管理。本文将详细讲解SpringBoot Starter依赖原理与实例详解的完整攻略,并提供两个示例。 1. Starter依赖原理 在SpringBoot中,Starter依赖是一种特殊的依赖,它可以自动配置SpringBoot应…

    Java 2023年5月15日
    00
  • Maven的聚合(多模块)和Parent继承

    Maven作为一个管理Java工程的强大工具,支持多模块(聚合)的构建和Parent继承机制。下面我们将详细讲解这两个功能的使用方法。 什么是Maven的聚合(多模块)? 在Maven中,聚合是指将多个子模块(即多个Maven项目)组合起来进行维护和构建,这种方式称为多模块构建。多模块构建可以将不同的依赖和资源管理在不同的模块中,实现更好的分离和管理。 创建…

    Java 2023年5月19日
    00
  • JavaEE微框架Spring Boot深入解读

    JavaEE微框架SpringBoot深入解读 简介 Spring Boot是一个基于Spring框架的快速应用开发框架,它简化了Spring应用的开发过程,使用起来非常方便,而且能够快速地搭建一个可用的、生产级别的应用程序。 Spring Boot的核心特性 自动配置 在Spring Boot的自动配置下,开发者不需要再手动地为每一个框架、类库引入一个配置…

    Java 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部