【问题标题】:Why is there no text in JFreeChart?为什么 JFreeChart 中没有文字?
【发布时间】:2011-12-29 04:05:23
【问题描述】:

JFreeChart 似乎工作正常,除了所有的文本。它根本没有出现,我不知道为什么。我附上了一张从教程网站获得的带有饼图的窗口图片。如您所见,文本不可见。 (抱歉我的推特很长)

谢谢

编辑:

这是生成上图的代码:

package analyzer_main;

import java.awt.Font;

public class FloatChart extends Composite implements Screen {

    JFreeChart floatChart;

    public FloatChart(Composite parent, int style){
        super(parent,style);
        createContents();
    }

    private void createContents(){
        this.setLayout(new FormLayout());
        floatChart = createChart(createDataset());
        ChartComposite chartComposite = new ChartComposite(this,SWT.NONE,floatChart, true);
        FormData fd_chartComposite = new FormData();
        fd_chartComposite.left  = new FormAttachment(0);
        fd_chartComposite.right = new FormAttachment(100,0);
        fd_chartComposite.top   = new FormAttachment(0);
        fd_chartComposite.bottom= new FormAttachment(100,0);
        chartComposite.setLayoutData(fd_chartComposite);
    }

/** * Creates the Dataset for the Pie chart */

    private PieDataset createDataset() {
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("One", new Double(43.2));
        dataset.setValue("Two", new Double(10.0));
        dataset.setValue("Three", new Double(27.5));
        dataset.setValue("Four", new Double(17.5));
        dataset.setValue("Five", new Double(11.0));
        dataset.setValue("Six", new Double(19.4));
        return dataset;
    }

    private JFreeChart createChart(PieDataset dataset) {

        JFreeChart chart = ChartFactory.createPieChart("Pie Chart Demo 1", // chart
                // title
                dataset, // data
                true, // include legend
                true, false);

        PiePlot plot = (PiePlot) chart.getPlot();
        plot.setSectionOutlinesVisible(false);
        plot.setLabelFont(new Font("SansSerif", Font.PLAIN, 12));
        plot.setNoDataMessage("No data available");
        plot.setCircular(false);
        plot.setLabelGap(0.02);
        return chart;
    }

    @Override
    public void Load() {
    }

}

如您所见,它与教程中的几乎相同。

【问题讨论】:

  • 我们要通过...来诊断您对 JFreeChart 的使用情况?
  • 好吧,我可以发布代码,但我是从教程网站上得到的。
  • 我不明白你为什么指向那篇文章。那就是偷懒。此外,这不是问题所在,而是在您的代码中。
  • 即使您遵循本教程,您也应该发布您使用的代码。否则,我们无法帮助您很好地了解问题所在并解决问题。

标签: java swt jfreechart


【解决方案1】:

我在使用 Linux Mint 11、Eclipse 和 JFreeChart 1.0.14 时遇到了同样的问题。我发现备份到 1.0.13 解决了这个问题。

【讨论】:

  • 我最终做了同样的事情 - 降级....我在 Windows 上。我还在 jfreechart 论坛上发布了一些东西,因为它似乎在 .14 发布后就被破坏了。
  • 刚刚遇到了同样的问题。看来您可以使用 jfreechart-1.0.14 jar,只需将 jcommon-1.0.17 替换为 jcommon-1.0.16。至少这解决了我的简单测试用例的问题。
  • Helmuth 的修复也对我有用。新的 JFreeChart 与以前版本的 JCommon(Indigo SR2、osx Mountain Lion)
  • 我相信这里的问题是我们切换了一些文本渲染以使用 AttributedStrings 并且 SWTGraphics2D 实现没有正确处理这些。这在更高版本的 JFreeChart 中已修复。
【解决方案2】:

首先,就像 Kevin Stembridge 所说,检查您的 JDK。您正在使用 Ubuntu,然后在终端中尝试以下命令:

sudo update-alternatives --config java

您可以看到安装在您的系统上的 JDK 以及您用于此项目的 JDK(在左侧选择了 *)。

如果你有 Oracle JDK(来自 java-6-sun 包)和 OpenJDK(openjdk-6-jdk 包),请尝试选择 Oracle JDK,因为 OpenJDK 与 Oracle JDK 有一些图形差异,也许这就是原因JFreeChart 上的这种奇怪行为。选择Oracle JDK,重新编译Java项目,看看你的JFreeChart中是否有什么变化。

查看Ubuntu Help page 了解有关 Java 的详细信息,或者阅读 SO 的 this old question,或者如果您想安装最新的 Oracle JDK,请阅读 this page

关于代码,它与教程中的非常相似,就像你说的那样。我已经使用 Eclipse 和 Oracle JDK 6 在 Ubuntu 上测试了你的代码。结果是这样的:

将图表添加到面板,仅编辑createContents 方法(并注释ChartComposite 部分,因为我不知道ChartComposite 是什么),使用以下代码:

private void createContents(){
        //this.setLayout(new FormLayout());
        floatChart = createChart(createDataset());
        ChartPanel chartPanel = new ChartPanel(floatChart);
        // default size
        chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
        // add it to our application
        setContentPane(chartPanel);
        /*ChartComposite chartComposite = new ChartComposite(this,SWT.NONE,floatChart, true);
        FormData fd_chartComposite = new FormData();
        fd_chartComposite.left  = new FormAttachment(0);
        fd_chartComposite.right = new FormAttachment(100,0);
        fd_chartComposite.top   = new FormAttachment(0);
        fd_chartComposite.bottom= new FormAttachment(100,0);
        chartComposite.setLayoutData(fd_chartComposite);*/
    }

然后,我的建议是检查您在屏幕截图中看到的用于 GUI 的所有代码,然后您应该解决问题。

如果您有任何疑问或问题,请评论此答案。

【讨论】:

  • 感谢您的精彩回答。自从您回答以来,我一直在尝试您建议的一些事情。我会让你知道...
  • @Hassan 欢迎您。我希望你能解决问题:-)
猜你喜欢
  • 2013-07-15
  • 1970-01-01
  • 2010-09-23
  • 2018-08-30
  • 2013-08-17
  • 2014-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多