jFreeChart与Struts2的组合,将jFreeChart作为显示视图

jFreeChart与Struts2的组合:
    一,加入Struts2支持
    二,加入struts2-jfreechart-plugin-2.1.6.jar
        注意:有的版本的此包有点小问题,此包内有一个struts-plugin.xml内容如下:

<struts>
            <package name="jfreechart-default" extends="struts-default">
           
                <result-types>
                    <result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult">
                        <param name="height">150</param>
                        <param name="width">200</param>
                    </result-type>
                </result-types>
            </package>
       
        </struts>
 

        若该package没有继承struts-default则需要手动加上extends="struts-default"再重新用jdk打包
   
    三,在action中生成我们的图片报表

/**
         * 生成图形报表
         *
         * @author 张明学
         *
         */
        @SuppressWarnings("serial")
        public class ViewResultAction extends ActionSupport {
       
            /**
             * 这里的JFreeChart的变量名称必须是chart(这是jfreeChart插件不足的地方)
             */
            private JFreeChart chart = null;
       
            private List<String> interest = null;
       
            @SuppressWarnings("unchecked")
            @Override
            public String execute() throws Exception {
                ActionContext context = ActionContext.getContext();
                Map application = context.getApplication();
       
                for (String inter : interest) {
                    if (application.get(inter) == null) {
                        application.put(inter, 1);
                    } else {
                        application.put(inter, (Integer) application.get(inter) + 1);
                    }
                }
                DefaultCategoryDataset dataset = new DefaultCategoryDataset();
                dataset.setValue((Integer) application.get("football"), "", "足球");
                dataset.setValue((Integer) application.get("volleyball"), "", "排球");
                dataset.setValue((Integer) application.get("basketball"), "", "蓝球");
                dataset.setValue((Integer) application.get("badminton"), "", "羽毛球");
                // 设置标题样式
                chart = ChartFactory.createBarChart3D("兴趣统计结果", "项目", "结果", dataset,
                        PlotOrientation.VERTICAL, true, false, false);
                chart.setTitle(new TextTitle("兴趣统计结果", new Font("黑体", Font.BOLD, 22)));
                // 报表中间部分
                CategoryPlot plot = (CategoryPlot) chart.getPlot();
                // 设置水平方向的样式
                CategoryAxis categoryAxis = plot.getDomainAxis();
                categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 20));
                categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
                // 设置垂直方向的样式
                NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();
                numberAxis
                        .setLabelFont(new Font("仿宋", Font.LAYOUT_NO_LIMIT_CONTEXT, 18));
                // 获得报表下面部分
                // chart.getLegend();
       
                return SUCCESS;
            }
       
            public List<String> getInterest() {
                return interest;
            }
       
            public void setInterest(List<String> interest) {
                this.interest = interest;
            }
       
            public JFreeChart getChart() {
                return chart;
            }
       
            public void setChart(JFreeChart chart) {
                this.chart = chart;
            }
       
        }
 

   
    四,struts.xml中的配置:

<struts>
            <package name="mengya" extends="jfreechart-default">
                <action name="viewResult" class="com.mengya.action.ViewResultAction">
                    <result name="success" type="chart">
                        <!-- 指定图形报表的大小 -->
                        <param name="height">600</param>
                        <param name="width">800</param>
                    </result>
                </action>
            </package>
        </struts>

 

       
        注意:由于在第二步的时候将jfreechart-default包继承了struts-default故这里可以直接继承jfreechart-default
        这样做的目地是result的type类型为chart,这个类型在struts-default中没有定义,是jreechart-default中定义的
        故我们要引入jfreechart-default包,但又要引入struts-default,因此我们可以让jfreechart-default包继承了struts-default。
        而在struts.xml中继承jfreechart-default就可以了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
JFreeChart是一个开源的Java图表库,可以用于创建各种类型的图表,包括折线图、柱状图、饼图等。要在JFreeChart显示tooltip,可以按照以下步骤进行操作: 1. 创建一个ChartPanel对象,该对象将用于显示图表。 2. 为ChartPanel对象添加一个MouseListener,以便捕获鼠标事件。 3. 在MouseListener的mouseMoved方法中,获取鼠标的坐标,并使用ChartPanel的getChartRenderingInfo方法获取图表的渲染信息。 4. 使用ChartRenderingInfo对象的getEntityCollection方法获取图表中的实体集合。 5. 遍历实体集合,判断鼠标坐标是否在实体的区域内。 6. 如果鼠标在实体的区域内,则可以通过实体对象的getToolTipText方法获取tooltip的内容。 7. 将tooltip内容显示在合适的位置,例如使用JOptionPane.showMessageDialog方法显示一个弹出窗口。 下面是一个示例代码,演示了如何在JFreeChart显示tooltip: ```java import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.entity.ChartEntity; import org.jfree.chart.entity.XYItemEntity; import org.jfree.chart.plot.XYPlot; import org.jfree.data.xy.XYDataset; import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; public class JFreeChartTooltipExample { public static void main(String[] args) { // 创建一个示例的XYDataset XYDataset dataset = createDataset(); // 创建一个折线图 JFreeChart chart = ChartFactory.createXYLineChart( "示例图表", // 图表标题 "X", // X轴标签 "Y", // Y轴标签 dataset // 数据集 ); // 创建一个ChartPanel对象,并设置大小 ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setPreferredSize(new Dimension(500, 300)); // 添加鼠标移动事件监听器 chartPanel.addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseMoved(MouseEvent e) { // 获取鼠标坐标 int mouseX = e.getX(); int mouseY = e.getY(); // 获取图表的渲染信息 ChartRenderingInfo info = chartPanel.getChartRenderingInfo(); // 获取图表中的实体集合 EntityCollection entities = info.getEntityCollection(); // 遍历实体集合,判断鼠标坐标是否在实体的区域内 for (Object entityObj : entities.getEntities()) { ChartEntity entity = (ChartEntity) entityObj; if (entity instanceof XYItemEntity) { Shape shape = entity.getArea(); if (shape.contains(mouseX, mouseY)) { // 如果鼠标在实体的区域内,获取tooltip内容并显示 String tooltip = entity.getToolTipText(); JOptionPane.showMessageDialog(null, tooltip); break; } } } } }); // 创建一个窗口,并将ChartPanel添加到窗口中 JFrame frame = new JFrame("JFreeChart Tooltip Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(chartPanel); frame.pack(); frame.setVisible(true); } private static XYDataset createDataset() { // 创建一个示例的XYDataset // 这里使用了一个简单的随机数据 XYSeries series = new XYSeries("数据系列"); for (int i = 0; i < 10; i++) { series.add(i, Math.random() * 100); } XYSeriesCollection dataset = new XYSeriesCollection(); dataset.addSeries(series); return dataset; } } ``` 这个示例代码创建了一个简单的折线图,并在鼠标移动时显示tooltip。你可以根据自己的需求修改代码,以适应不同类型的图表和tooltip内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值