posts - 309, comments - 6940, trackbacks - 0, articles - 3
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

在Eclipse RCP中开发JFreeChart示例

Posted on 2007-10-16 16:25 诗特林 阅读(5962) 评论(6)  编辑  收藏 所属分类: Java
                                               在Eclipse RCP中开发JFreeChart示例

RCP,就是Rich Client Platform的缩写,即富客户平台,是Eclipse进化的产物(自3.0版以后出现),是Eclipse组织向用户提供的强大的开放性开发平台,能够使用户方便地创建自己的基于Eclipse的应用程序,并且这些应用程序能够得到Eclipse的底层支持。更重要的是,我们可以利用Java创建象Eclipse这么漂亮的桌面程序。

  有人说,RCP一定会变得非常流行。因为RCP,可以开发界面象Eclipse这样漂亮的桌面程序。那就来做一个JFreeChat的示例吧。

一、下载JFreeChart包

1.http://www.jfree.org/jfreechart/

2.用到的包:(注,我的开发环境是eclipse3.2)
  • jcommon-1.0.10.jar

  • jfreechart-1.0.6.jar

  • jfreechart-1.0.6-experimental.jar

  • jfreechart-1.0.6-swt.jar

  • swtgraphics2d.jar


    二、新建项目

    在Eclipse下如何建立plug-in的内容在Google上一搜一大把,有些人会觉得乏味,但是没关系,这只是一个快速的起步。下面大致说一下。有不明白的,可以参考http://www.vogella.de/articles/RichClientPlatform/article.html#using_jars,非常的详细

    1、建完项目后记得把上面提到的JFreeChart包加入的项目“Propertires”的“Java Build Path”中。

    2、还需要在项目的META-INF/MANIFEST.MF文件的“runtime”中加入以上的包,不然运行时会说找不相关的类,如下图


    三、建立View

    建View在上面文档http://www.vogella.de/articles/RichClientPlatform/article.html#using_jars中5.2. Add a view to your application有讲,我在这里大致上几个图说明一下。

    1.点击配置文件的“extensions”,选择"org.eclipse.views",右键,》"new"》"view",


    2.点击右边class*.;链接,来创建新的类




    3.此类的代码如下

    package jfreechatrcp;

    import java.awt.Font;

    import org.eclipse.swt.SWT;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.ui.part.ViewPart;
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.plot.PiePlot;
    import org.jfree.data.general.DefaultPieDataset;
    import org.jfree.data.general.PieDataset;
    import org.jfree.experimental.chart.swt.ChartComposite;



    public class MyNewView extends ViewPart {



        
    public MyNewView() {

            
    // TODO Auto-generated constructor stub

        }



        
    private static PieDataset createDataset() {

            DefaultPieDataset dataset 
    = new DefaultPieDataset();

            dataset.setValue(
    "猪肉"new Double(43.2));

            dataset.setValue(
    "牛肉"new Double(10.0));

            dataset.setValue(
    "猪肉"new Double(27.5));

            dataset.setValue(
    "羊肉"new Double(17.5));

            dataset.setValue(
    "鸡肉"new Double(11.0));

            dataset.setValue(
    "鸭肉"new Double(19.4));

            
    return dataset;

        }




        
    /**

         * Creates a chart.

         * 

         * 
    @param dataset

         *            the dataset.

         * 

         * 
    @return A chart.

         
    */


        
    private static JFreeChart createChart(PieDataset dataset) {



            JFreeChart chart 
    = ChartFactory.createPieChart("肉食品消费统计图示例"// chart

                    
    // title

                    dataset, 
    // data

                    
    true// include legend

                    
    truefalse);



            PiePlot plot 
    = (PiePlot) chart.getPlot();

            plot.setSectionOutlinesVisible(
    false);

            plot.setLabelFont(
    new Font("SansSerif", Font.PLAIN, 12));

            plot.setNoDataMessage(
    "没有统计数据");

            plot.setCircular(
    false);

            plot.setLabelGap(
    0.02);

            
    return chart;



        }




        
    public void createPartControl(Composite parent) {

            JFreeChart chart 
    = createChart(createDataset());

            
    final ChartComposite frame = new ChartComposite(parent, SWT.NONE,

                    chart, 
    true);

        }




        
    /**

         * Passing the focus request to the viewer's control.

         
    */


        
    public void setFocus() {

        }


        
    }



    4.修改Perspective类,使程序能够运行

    package jfreechatrcp;

    import org.eclipse.ui.IPageLayout;
    import org.eclipse.ui.IPerspectiveFactory;

    public class Perspective implements IPerspectiveFactory {

        
    public void createInitialLayout(IPageLayout layout) {
            layout.addView(
    "jfreechatrcp.MyNewView", IPageLayout.TOP,IPageLayout.RATIO_MAX, IPageLayout.ID_EDITOR_AREA);
        }


    }


    5.运行程序
    META-INF/MANIFEST.MF》》Launch as Eclipse application

    四、结果


    源代码jfreechatRCP.rar,请自行下载jfreechart包

    参考文献
    http://www.vogella.de/articles/RichClientPlatform/article.html#firstplugin
    http://www.vogella.de/articles/EclipseJFreeChart/article.html


  • 评论

    # re: 在Eclipse RCP中开发JFreeChart示例  回复  更多评论   

    2007-10-16 16:58 by 交口称赞
    我晕死
    现在有ChartComposite 了啊。。。。


    以前费了老大劲写的能显示报表的view

    现在就一行代码。。。。。。。。。。。

    # re: 在Eclipse RCP中开发JFreeChart示例  回复  更多评论   

    2007-10-17 07:45 by 翔南
    呵呵 好东西!
    收藏啦

    # re: 在Eclipse RCP中开发JFreeChart示例[未登录]  回复  更多评论   

    2007-10-17 09:27 by 阿蜜果
    嘻嘻,这东西好!

    # re: 在Eclipse RCP中开发JFreeChart示例  回复  更多评论   

    2007-12-24 13:51 by GentleYang
    俺一同事疯狂追逐着RCP......个人 作品都好几个嘞

    # re: 在Eclipse RCP中开发JFreeChart示例  回复  更多评论   

    2009-10-09 09:54 by 陶林
    您好!我们公司最近在做个RCP的项目,要用到JFreeChart画图。我也照着您这个模式做了一个在RCP中开发JFreeChart的一个实例,代码基本上都是拷贝您的,但是我运行的时候出问题了,视图里没有我要的饼图,只显示一个错误“无法创建视图:插件“Plugin0927”无法实例化类“plugin0927.ui.TeachUnitClass”。”我的RCP项目名“Plugin0927”,视图类是“TeachUnitClass”。打开这个错误,看到里面有一句是:“Java.lang.NoClassDefFoundError:org/jfree/data/general/PieDataset”。后来仔细研究您的这篇博客,发现问题出在“2、还需要在项目的META-INF/MANIFEST.MF文件的“runtime”中加入以上的包,不然运行时会说找不相关的类”!现在已经解决问题!非常谢谢您的这篇博客!这个问题已经困扰我好几天了,国庆长假里一直在思考这个问题!

    # re: 在Eclipse RCP中开发JFreeChart示例[未登录]  回复  更多评论   

    2015-07-29 15:44 by 果冻
    谢谢楼主,不过楼主应该还没说完吧?需要在runtime的classpath中把以上的包加入进去,否则会出现问题:无法实例化类

    只有注册用户登录后才能发表评论。


    网站导航: