`
seawavenews
  • 浏览: 231707 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

JFreeChart Hacking-补丁贴

阅读更多

JFreeChart Hacking

<本文允许任意转载,请注明出处!最后一块骨头.2005-05-16>

JFreeChart 是什么?我就不再重复介绍了,网上文章大把...
官方主页:http://www.jfree.org/jfreechart/index.html

<--本文以jfreechart-1.0.0-pre2版本为基准-->

那么为什么要Hacking JFreeChart呢?

罪状一:中文Label显示模糊;
罪状二:无简体中文LocalizationBundle.properties文件;
罪状三:向下兼容性不好,官方说jdk1.2+,其实是jdk1.4+;
                兼容问题A:另存菜单输出PNG文件只能运行于jdk1.4+;
                兼容问题B:另存菜单不能输出JPEG格式图片;
                兼容问题C:jdk1.3-环境下中文ToolTips不能正常显示;

如果一定要加一条罪状的话:目前开源免费的chart项目无出其右;
十分感谢JFreeChart开发者的辛苦努力!虽然它现在还不完美。

Ok,下面为Hacking做一些准备工作...
1.下载jfreechart-1.0.0-pre2.zip解压;
2.将\解压目录\source\下的源码加入任意project并配置jdk&lib;
3.安装一个有批量文件查询/替换功能的工具,比如UtralEdit;

<本文允许任意转载,请注明出处!最后一块骨头.2005-05-16>

Hacking Begin

1.解决中文Label显示模糊问题
  原因分析:JFreeChart默认字体对中文的支持不完善;
  解决步骤:搜索\解压目录\source\下含有'new Font('的文件;
           发现JFreeChart默认字体为
           'foo'
           'Serif'
           'Dialog'
           'SansSerif'
           'Bitstream Vera Sans'
           批量替换他们为任意中文字体(推荐'黑体');
           当然你也可以把字体写入properties文件,
           但这里介绍的是最简单的方法;
           然后重新编译你修改过的文件,Ok,搞定!

2.无简体中文LocalizationBundle.properties文件
  org\jfree\chart\LocalizationBundle.properties
  主要用来显示右键功能菜单的文字,下面我们来汉化:

  注意:LocalizationBundle.properties的编码不是Unicode,
       简体中文要用GBK编码。
 
  获得GBK编码的方法是:
  cd ***\j2sdk1.*.*\bin
  native2ascii -encoding GBK 1.txt 2.txt
  注:1.txt放中文文本,2.txt输出GBK编码。
 
# org.jfree.chart.ChartPanel ResourceBundle properties file
#
# Changes (from 31-Aug-2003)
# --------------------------
# 31-Aug-2003 : Initial version (AL);
# 16-May-2005 : Add GBK version (FinalBone);
# 16-May-2005 : Add JPG_Image_Files (FinalBone);

#---------------EN---------------#
#Auto_Range=Auto Range
#All_Axes=Both Axes
#Chart_Properties=Chart Properties
#Copy=Copy
#Print...=Print...
#Save_as...=Save as...
#Properties...=Properties...
#PNG_Image_Files=PNG Image Files
#JPG_Image_Files=JPG Image Files
#Domain_Axis=Domain Axis
#Range_Axis=Range Axis
#Zoom_In=Zoom In
#Zoom_Out=Zoom Out

#---------------GBK---------------#
Auto_Range=\u81ea\u52a8\u8c03\u6574
All_Axes=\u6240\u6709\u5750\u6807\u8f74
Chart_Properties=\u56fe\u8868\u5c5e\u6027
Copy=\u590d\u5236
Print...=\u6253\u5370...
Save_as...=\u53e6\u5b58\u4e3a...
Properties...=\u5c5e\u6027...
PNG_Image_Files=PNG\u56fe\u50cf
JPG_Image_Files=JPG\u56fe\u50cf
Domain_Axis=\u57df\u5750\u6807\u8f74
Range_Axis=\u503c\u5750\u6807\u8f74
Zoom_In=\u653e\u5927
Zoom_Out=\u7f29\u5c0f

另外还有两个同名文件,希望大家有时间也汉化一下。
org\jfree\chart\ui\LocalizationBundle.properties
org\jfree\chart\plot\LocalizationBundle.properties

3.兼容性问题
   a.PNG输出问题 b.无JPEG输出菜单
    原因分析:javax.imageio.ImageIO这个类只有jdk1.4+才有。
    解决步骤:1.打开org.jfree.chart.ChartPanel,
               查看doSaveAs()方法,了解其结构;
             2.改写doSaveAs()方法,重新编译;
             3.如果运行环境是jdk1.3-
               打开org.jfree.chart.encoders.SunPNGEncoderAdapter
               注释掉javax.imageio.ImageIO,重新编译。


    /**
     * Updated by FinalBone 2005-5-16 PNG --> JPEG
     *
     * Opens a file chooser and gives the user an opportunity
     * to save the chart in JPEG format.
     *
     * @throws IOException if there is an I/O error.
     */
    public void doSaveAs() throws IOException {

        JFileChooser fileChooser = new JFileChooser();
        ExtensionFileFilter filter = new ExtensionFileFilter(
            localizationResources.getString('JPG_Image_Files'), '.jpg'
        );
        fileChooser.addChoosableFileFilter(filter);

        int option = fileChooser.showSaveDialog(this);
        if (option == JFileChooser.APPROVE_OPTION) {
            String filename = fileChooser.getSelectedFile().getPath();
            if (isEnforceFileExtensions()) {
                if (!filename.endsWith('.jpg')) {
                    filename = filename + '.jpg';
                }
            }
            ChartUtilities.saveChartAsJPEG(
                new File(filename), this.chart, getWidth(), getHeight()
            );
        }

    }

  c.中文ToolTips不能正常显示(显示为小方框)
    原因分析:相关字体找不到。
    解决步骤:1.打开org.jfree.chart.block.LabelBlock
               查看其构造函数public LabelBlock(String label);
             2.修改构造函数的字体定义,重新编译。

    /**
     * Creates a new label block.
     *
     * @param label  the label.
     */
    public LabelBlock(String label) {
         /**
          * Updated by FinalBone 2005-05-16
          * 'Bitstream Vera Sans' --> '黑体'
          * For Chinese-Simplified ToolTips
          * JDK 1.3- Environment
          */
        this(label, new Font('黑体', Font.PLAIN, 11));
    }

Hacking End

<本文允许任意转载,请注明出处!最后一块骨头.2005-05-16>

这时的 JFreeChart 才是真正jdk1.2+兼容,完美支持中文。

希望下一版本的 JFreeChart 的字体定义写入properties文件,
并且不同路经下的properties文件最好不要重名。

 
分享到:
评论

相关推荐

    jfreechart1.0.3-demo-src

    《JFreeChart 1.0.3 演示源码解析》 JFreeChart 是一个广泛使用的 Java 图形库,它提供了丰富的图表类型,包括饼图、柱状图、线图、散点图等,使得开发者能够在 Java 应用程序中方便地创建高质量的图表。...

    jfreechart-0.9.21 jar包和jfreechart-0.9.21-demo

    jfreechart-0.9.21的jar包和jfreechart-0.9.21-demo

    struts2-jfreechart-plugin-2.1.8.1.jar

    struts2-jfreechart-plugin-2.1.8.1.jar

    struts2-jfreechart-plugin-2.0.11.jar

    struts2-jfreechart-plugin-2.0.11.jarstruts2-jfreechart-plugin-2.0.11.jarstruts2-jfreechart-plugin-2.0.11.jar

    jfreechart,jfreechart-1.0.13,jfreechart-1.0.13,jfreechart

    这个压缩包“jfreechart-1.0.13”包含了JFreeChart的完整版本,让我们一起深入探讨其核心功能和使用方法。 JFreeChart是Java中最优秀的绘图工具之一,它支持多种图表类型,包括折线图、柱状图、饼图、散点图、甘特...

    Jfreechart--demo

    **JFreeChart——一款强大的Java图表库** JFreeChart是一款广泛使用的开源Java库,它能够帮助开发者...通过学习和实践`jfreechart--demo`中的示例,开发者可以快速掌握JFreeChart的使用,进一步提升数据可视化的技能。

    jfreechart-1.0.14-demo.jar 对应的源码

    在1.0.14版本中,其提供的`jfreechart-1.0.14-demo.jar`是一个演示程序,展示了库的各种功能。而`jfreechart-1.0.14.zip`则包含了这个演示程序对应的源代码,对于开发者来说,这是一个宝贵的资源,可以深入理解图表...

    jfreechart-1.0.19-demo-src

    jfreechart-1.0.19压缩包中有一个jfreechart-1.0.19-demo.jar,里面演示了各种图表的制作案例,包括BarChart、LineChart、PieChart、TimeSeriesChart、XYSeries等等,共309个例子,现开放源码,请各位下载,欢迎交流...

    jfreechart-1.0.19-jars.rar

    包含 jfreechart-1.0.19-demo.jar(java 环境下点击就可以查看) 包含jar包 jfreechart-1.0.19.jar,jfreechart-1.0.19-swt.jar,jcommon-1.0.23.jar,junit-4.11等,具体项目中需要哪些jar 包 ...

    jfreechart-1.0.6-demo源码

    在本文中,我们将深入探讨"jfreechart-1.0.6-demo"源码,以揭示其内部的工作原理和设计模式,帮助开发者更好地理解和使用这一强大的工具。 1. **JFreeChart概述** JFreeChart项目始于2000年,旨在为Java开发者提供...

    jfreeChart---DEMO

    "jfreeChart---DEMO"是一个很好的实例,展示了如何利用JFreeChart在Java Web环境中创建动态的折线图。通过Servlet封装数据并传递给JSP,我们可以实现数据驱动的图表更新,这对于实时监控、数据分析等场景非常有用。...

    jfreechart-1.0.19

    1. **jfreechart-1.0.19-install.pdf**:这可能是安装或使用指南,详细介绍了如何将JFreeChart库集成到你的Java项目中,包括依赖管理和配置步骤,可能还包括示例代码和最佳实践。 2. **jfreechart-1.0.19-fx-...

    jfreechart-1.0.14-swt.jar

    jfreechart-1.0.14-swt.jar

    JFreeChart-1.0.19 的jar包以及源代码

    JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图...

    jfreechart--类说明

    在“jfreechart--类说明”中,我们将探讨JFreeChart的核心类及其功能。 1. **ChartFactory**: 这是创建图表的主要入口点,提供了大量静态方法来创建不同类型的图表,如`createPieChart()`, `createBarChart()` 和 `...

    JFreeChart -- web图表生成源码

    传统的一些以软件包形式发布应用程序例如报表系统等都在逐渐搬到因特网上。但是这两者之间有着天壤之别,虽然对于数据获取、业务处理等方面...因此我们下面将介绍一个JAVA的图表引擎JFreeChart用来产生基于WEB的图表。

    JFreeChart1.0.13-demo-src(无错版)

    项目中要用到JFreeChart做图,但是DEMO源码要收费的,而且在CSDN上下载都是反编译DEMO出来的,到处都是异常就拿出来骗分,我自己花了1个小时间把所有异常都改掉了,并且测试无错。 这个包是我直接把我Eclipse项目...

    jfreechart-1.0.19-demo.src

    这个“jfreechart-1.0.19-demo.src”压缩包包含了JFreeChart库1.0.19版本的示例源代码,对于理解JFreeChart的使用方法和内部机制非常有帮助。 源码分析: 1. **类结构与设计模式**:JFreeChart的设计遵循了模块化...

    jfreechart---lib.zip

    JFreeChart是完全基于Java语言的开源项目,因此可以使用在Java开发环境中,包括Java应用程序,或者是Java Web应用都没有任何问题。结合iText项目,可将生成的统计图表输出到PDF文件中;结合最新的POI项目,也可以将...

    jfreechart-1.0.13.jar 最新版下载

    jfreechart-1.0.13 jfreechart-1.0.13 jfreechart-1.0.13 jfreechart-1.0.13 jfreechart-1.0.13 jfreechart-1.0.13

Global site tag (gtag.js) - Google Analytics