在使用Eclipse RCP中创建的jfreechart柱状图中,文本字段未显示。

3

当我在Eclipse RCP插件的视图中使用Jfreechart显示条形图时,条形图标题、域轴名称和值轴名称不可见。

以下是在视图中显示条形图的代码:

            final CategoryDataset dataset = createDataset();
            final JFreeChart chart = createChart(dataset);

            final ChartComposite frame = new    ChartComposite(barchartComposite,SWT.NONE,chart,true);
            frame.setLayoutData(new GridData(GridData.FILL_BOTH));
            frame.pack();
            frame.setVisible(true);
            frame.setChart(chart);
            frame.forceRedraw();
            barchartComposite.getLayout();


 private CategoryDataset createDataset() {

    // row keys...
    final String series1 = "First";


    // column keys...
    final String category1 = "error";
    final String category2 = "info";
    final String category3 = "warning";
    final String category4 = "critical";


    // create the dataset...
    final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

    dataset.addValue(10, series1, category1);
    dataset.addValue(5, series1, category2);
    dataset.addValue(6, series1, category3);
    dataset.addValue(9, series1, category4);


    return dataset;

}

  private JFreeChart createChart(final CategoryDataset dataset) {

    // create the chart...
    final JFreeChart chart = ChartFactory.createBarChart(
        "Priority BarChart",         // chart title
        "priority",               // domain axis label
        "Value",                  // range axis label
        dataset,                  // data
        PlotOrientation.VERTICAL, // orientation
        true,                     // include legend
        true,                     // tooltips?
        false                     // URLs?
    );

    // NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...

    // set the background color for the chart...
    chart.setBackgroundPaint(Color.white);

    // get a reference to the plot for further customisation...
    final CategoryPlot plot = chart.getCategoryPlot();
    plot.setBackgroundPaint(Color.lightGray);
    plot.setDomainGridlinePaint(Color.white);
    plot.setRangeGridlinePaint(Color.white);

    // set the range axis to display integers only...
    final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
    rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

    // disable bar outlines...
    final BarRenderer renderer = (BarRenderer) plot.getRenderer();
    renderer.setDrawBarOutline(false);

    // set up gradient paints for series...
    final GradientPaint gp0 = new GradientPaint(
        0.0f, 0.0f, Color.blue, 
        0.0f, 0.0f, Color.lightGray
    );

    renderer.setSeriesPaint(0, gp0);


    final CategoryAxis domainAxis = plot.getDomainAxis();
    domainAxis.setCategoryLabelPositions(
        CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 6.0)
    );
    // OPTIONAL CUSTOMISATION COMPLETED.

    return chart;

}   

以上代码在eclipse RCP插件的视图上创建了一个条形图。 createdataset()方法生成图表数据 createChart()方法生成图表。


关于标签,这是 SWT 的问题吗? - trashgod
1个回答

1

我使用了 jfreechart-1.0.14 重现了这个错误。看起来是版本 1.0.14 中 ChartComposite 的一个 bug。

解决方案:

您可以使用 jfreechart-1.0.13 库。我已经测试了您问题中的代码,它可以正常工作。

jfreechart bug 跟踪器 中也有相关记录。

引用:

在补丁 3506228 中有一个修复方法。该修复方法将包含在即将发布的 1.0.15 版本中。


请参阅最新的分支[NEWS](http://jfreechart.svn.sourceforge.net/viewvc/jfreechart/branches/jfreechart-1.0.x-branch/)。 - trashgod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接