`
稻-草
  • 浏览: 62767 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JFreeChart 实现全图tooptip

    博客分类:
  • Java
阅读更多

之前也没有接触过JFreeChart,如有错误或更简单的实现恳请指出, 谢谢。

 

JFreeChart的默认只有鼠标在数据点上的时候才显示tooltip;两点之间的数据就不能显示tooptip,如果数据是滚动变化的就更难使用。 所以决定干脆鼠标放哪,就显示鼠标点的数据。

最终效果如下图:

 

 

查了下Api,JFreeChart好像没有这样的功能,只好自己实现了.

 

JFreeChart中画图的面板是ChartPanel, tooltip的文字内容也是由这个类产生的.只要继承ChartPanel并重载getToolTipText方法就行了。下面是代码实现:

package com.straw;

public class ToolTipChartPanel extends ChartPanel
{

    private ValueAxis xAxis;
    private ValueAxis yAxis;
    private SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");   

    public ToolTipChartPanel(JFreeChart chart, XYPlot xyplot)
    {
        super(chart);
        this.xAxis = xyplot.getDomainAxis();
        this.yAxis = xyplot.getRangeAxis();
    }

    @Override
    public String getToolTipText(MouseEvent e) 
    {
        Rectangle2D dataArea = getScaledDataArea();
        
        // 不在区域内的直接返回
        if (!dataArea.contains(e.getX(), e.getY() ))
        {
            return null;
        }        
        
        long x = getValueX(dataArea, e.getX()); 
        double y = getValueY(dataArea, e.getY());        
            
        return sdf.format(new Date(x)) + ", " + 100*y + "%";
    }
    
    

    private long getValueX(Rectangle2D dataArea, int mouseX)
    {
        // 1 获得像素值
        long x = (long) (mouseX - dataArea.getMinX());        
        
        // 2 转化成时间毫秒
        double lowerBound = xAxis.getLowerBound();
        double upperBound = xAxis.getUpperBound();
        x = (long) (x*(upperBound - lowerBound)/dataArea.getWidth() + lowerBound);   
        
        return x;
    }
    
    private double getValueY(Rectangle2D dataArea, int mouseY)
    {
        // 1 获得像素值
        double y = (dataArea.getHeight() - (mouseY - dataArea.getMinY()));
        
        // 2 转化成数值
        double lowerBound = yAxis.getLowerBound();
        double upperBound = yAxis.getUpperBound();
        y =  (y*(upperBound - lowerBound)/dataArea.getHeight() + lowerBound);
        
        return y;
    }
}

 

 

  • 大小: 9.5 KB
分享到:
评论
5 楼 coralsea 2010-05-28  
试试HTML5的canvas吧,现成的可以用Flot:http://code.google.com/p/flot/
4 楼 稻-草 2009-11-10  
我也觉得Jfreechart 不好用。
Jfreechart 的可用性不好,源代码也不咋地,太复杂了。
目前的情况就是得不偿失,还不如自己画来的简单。

3 楼 taoman 2009-11-08  
楼上的最后用了啥?
2 楼 aunox 2009-11-08  
caoyangx 写道
昨天我刚刚淘汰了新项目采用jfreechart这个方案。
原因:

1.新版本对应的文档都是E文,最主要的原因是文档居然收费,不能容忍。

2.性能很差,我看过他的源码,web报表是生成图片信息放入session中,然后通过servlet传入图片名称返回图片。我通过JVM内存监视,发现只需要点击3-6次报表的链接,freememory就会从10MB左右变成0.xxxMB,然后导致JVM重新获取内存。如果访问量稍稍大一点,肯定会导致系统崩溃。

3.web报表格式单一,只能PNG和JPEG两种,缺乏主流报表的动感,我不奢望比较Flash,最起码也得有个能动的gif吧。

4.使用繁琐,构造报表数据麻烦,每种类型报表没有统一接口,不方便做二次开发,而且每种报表类型的中文解决都不同。想做通用的报表接口很难很痛苦。


那你选择了哪个报表?说来学习一下!
1 楼 caoyangx 2009-11-07  
昨天我刚刚淘汰了新项目采用jfreechart这个方案。
原因:

1.新版本对应的文档都是E文,最主要的原因是文档居然收费,不能容忍。

2.性能很差,我看过他的源码,web报表是生成图片信息放入session中,然后通过servlet传入图片名称返回图片。我通过JVM内存监视,发现只需要点击3-6次报表的链接,freememory就会从10MB左右变成0.xxxMB,然后导致JVM重新获取内存。如果访问量稍稍大一点,肯定会导致系统崩溃。

3.web报表格式单一,只能PNG和JPEG两种,缺乏主流报表的动感,我不奢望比较Flash,最起码也得有个能动的gif吧。

4.使用繁琐,构造报表数据麻烦,每种类型报表没有统一接口,不方便做二次开发,而且每种报表类型的中文解决都不同。想做通用的报表接口很难很痛苦。

相关推荐

    java中关于JFreeChart实现实时曲线图

    在Java编程语言中,利用JFreeChart库实现实时曲线图是一种常见的数据可视化技术,尤其适用于需要实时监控或展示数据变化的应用场景。JFreeChart是一个开源的Java图表库,提供了丰富的图表类型和自定义选项,使得...

    jfreechart实现柱状图排序

    根据提供的信息,我们可以总结出以下关于使用 JFreeChart 实现柱状图排序的相关知识点: ### 一、背景介绍 在日常的数据分析与展示工作中,柱状图是非常常见的一种图表类型,它能直观地显示不同类别之间的数值差异...

    用JFreeChart写的雷达图实例

    本文将深入探讨如何利用JFreeChart库来实现一个雷达图实例,这有助于数据可视化,特别是在数据分析和报告中。 首先,我们来看`WMPolarPlot.java`,这个文件很可能包含了对极坐标图(Polar Plot)的实现,因为雷达图...

    java利用JFreeChart实现各类数据统计图柱形图饼图折线图.pdf

    Java 利用 JFreeChart 实现数据统计图 在数据挖掘中,数据分析的结果需要直观地展现给用户,这就需要使用数据统计图。Java 中可以使用 JFreeChart 库来实现各种数据统计图,如柱形图、饼图、折线图等。下面将详细...

    利用JFreeChart 实现柱状图,饼图,时序图,折线图等

    下面我们将详细介绍如何利用JFreeChart实现这些图表。 1. **柱状图(Bar Chart)** 柱状图是表示分类数据的一种方式,每个类别由一个垂直的矩形表示,矩形的高度表示该类别的数量或比例。在JFreeChart中,你可以...

    JfreeChart-雷达图与导出

    JFreeChart是一款强大的Java图表库,它允许开发者在Java应用程序或网页中创建多种类型的图表,包括雷达图(也称为蜘蛛网图)。本篇将深入探讨如何利用JFreeChart生成雷达图以及相关的数据导出功能。 **雷达图的使用...

    用JFreeChart在网页中实现Gantt图

    本教程将重点介绍如何使用Java的JFreeChart库在JSP页面上实现甘特图。 JFreeChart是一款强大的Java图表库,支持创建各种类型的图表,包括柱状图、饼图、线图以及我们的目标——甘特图。在JSP页面中使用JFreeChart,...

    jfreechart 堆栈柱状图跟折线图结合拼接

    jfreechart 堆栈柱状图跟折线图结合拼接 jar包请戳http://download.csdn.net/detail/a156435646/7424707

    java里用JFreeChart画柱状图、折线图、雷达图

    在Java编程环境中,JFreeChart库是一个强大的工具,用于创建各种复杂的图表,包括柱状图、折线图和雷达图。这些图表对于数据可视化和数据分析非常有用,可以帮助开发者直观地展示大量信息。以下是对给定文件中每个...

    JFreeChart+JSP实现统计图展示

    "JFreeChart+JSP实现统计图展示"是一个典型的Web应用程序开发案例,它结合了JFreeChart库、JavaServer Pages (JSP) 和Servlet技术,用于从SQL Server 2005数据库中提取数据并以图表的形式呈现。 **JFreeChart** 是...

    JFreeChart画雷达图

    JFreeChart是一款强大的Java图形库,它允许开发者创建各种复杂的图表,包括我们这里关注的雷达图(也称为蜘蛛网图)。雷达图是一种多轴图表,常用于比较多个变量在同一尺度上的表现,或者展示数据在多个维度上的分布...

    JSP+JFreeChart 实现曲线图、柱形图

    在"JSP+JFreeChart 实现曲线图、柱形图"的项目中,开发者首先需要在JSP页面中引入JFreeChart的相关库。这通常通过在页面头部添加JAR依赖或者使用Maven或Gradle等构建工具来完成。然后,我们需要在Java后端代码中创建...

    jfreechart绘制的风速风向玫瑰图

    使用jfreechart绘制风速风向玫瑰图可以非常方便地实现各种风速风向分析。例如,我们可以使用不同的颜色来表示不同的风速和风向,可以使用雷达图像网格来表示风速的分布情况等。jfreechart提供了非常灵活的图表定制...

    JFreeChart画图 饼状图 单组柱状图 多组柱状图 堆积柱状图 折线图

    JFreeChart 饼状图 柱状图 柱状图 堆积柱状图 折线图 这个是我特地开发的一个用JFreeChart开发的用来画图的项目,已经开发成形了各种项目的各种需求的项目,并且自己可以拓展,根据需求修改代码,完成项目的需要。 ...

    jfreechart雷达图

    在本篇中,我们将深入探讨如何利用JFreeChart来制作雷达图(也称为蜘蛛图或星形图),并理解其相关知识点。 1. **JFreeChart简介** JFreeChart是一个开源项目,其目标是提供一个可以免费使用的高质量图表API。它...

    JFreeChart画曲线图

    JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的2D图表,包括曲线图、柱状图、饼图、散点图等。在本示例中,我们将重点关注如何使用JFreeChart绘制曲线图,以及如何在数据点上显示具体的数据值。 ...

    java使用JFreeChart制作柱形图

    总的来说,JFreeChart 是一个强大的工具,可以帮助 Java 开发者轻松实现各种图表的绘制,提高数据可视化的效率和质量。通过深入学习和实践,你可以掌握更多高级特性,比如动画效果、交互式图表等,从而提升你的应用...

    java图形工具 jfreechart全套图形工具及文档源码一网打尽

    Java图形工具JFreeChart是Java开发中用于创建高质量图表的一款强大库,它为开发者提供了丰富的图形类型,包括折线图、柱状图、饼图、散点图等,适用于数据分析、报表生成、可视化应用等多种场景。JFreeChart以其灵活...

    java利用JFreeChart实现各种数据统计图(柱形图_饼图_折线图).pdf

    而JFreeChart作为一个功能强大的Java图表库,使得开发者可以方便地利用Java语言生成各种类型的数据统计图表,如柱形图、饼图、折线图等。本文将详细介绍如何使用Java和JFreeChart库来实现这些统计图表,并提供相关...

    jfreechart 生成折线图,饼图,柱状图,堆栈柱状图

    JFreeChart 是一个开源的Java库,用于生成高质量的2D图表,如折线图、饼图、柱状图和堆栈柱状图等。它广泛应用于数据分析、报告和应用程序中,提供丰富的自定义选项来满足各种视觉需求。在本项目中,你将找到能够...

Global site tag (gtag.js) - Google Analytics