为什么JFreeChart中没有文字?

时间:2011-12-20 15:21:18

标签: java swt jfreechart

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

感谢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() {
    }

}

正如您所看到的,它与教程中的几乎相同。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

首先,像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,或this page如果要安装最新的Oracle JDK。

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

screenshot

将图表添加到面板,仅编辑createContents方法(并评论ChartComposite部分,因为我不知道ChartComposite是什么),使用此代码:< / p>

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的所有代码,您应该解决问题。

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