我在一个Java文件中利用jfreechart生成一个报表并存在一个图片中,但是应该出现中文的地方都显示为方框。不知道怎么解决

解决方案 »

  1.   

    附源码如下:public class BarChartDemo 
    {
    public static void main(String[] args) throws IOException{
    CategoryDataset dataset = getDataSet2();
    JFreeChart chart = ChartFactory.createBarChart3D(
    "Fruit product", // 图表标题
    "水果", // 目录轴的显示标签
    "产量", // 数值轴的显示标签
    dataset, // 数据集
    PlotOrientation.HORIZONTAL, // 图表方向:水平、垂直
    true,  // 是否显示图例(对于简单的柱状图必须是false)
    false,  // 是否生成工具
    false  // 是否生成URL链接
    );

    FileOutputStream fos_jpg = null;
    try {
    fos_jpg = new FileOutputStream("D:\\fruit.gif");
    ChartUtilities.writeChartAsJPEG(fos_jpg,1,chart,400,300,null);
    } finally {
    try {
    fos_jpg.close();
    } catch (Exception e) {}
    }
    }

    /**
     * 获取一个演示用的组合数据集对象
     * @return
     */
    private static CategoryDataset getDataSet2() {
    DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    dataset.addValue(100, "北京", "苹果");
    dataset.addValue(100, "上海", "苹果");
    dataset.addValue(100, "广州", "苹果");
    dataset.addValue(200, "北京", "梨子");
    dataset.addValue(200, "上海", "梨子");
    dataset.addValue(200, "广州", "梨子");
    dataset.addValue(300, "北京", "葡萄");
    dataset.addValue(300, "上海", "葡萄");
    dataset.addValue(300, "广州", "葡萄");
    dataset.addValue(400, "北京", "香蕉");
    dataset.addValue(400, "上海", "香蕉");
    dataset.addValue(400, "广州", "香蕉");
    dataset.addValue(500, "北京", "荔枝");
    dataset.addValue(500, "上海", "荔枝");
    dataset.addValue(500, "广州", "荔枝");
    return dataset;
    }
      

  2.   

    我引用的包import java.io.FileOutputStream;
    import java.io.IOException;import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartUtilities;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.data.category.CategoryDataset;
    import org.jfree.data.category.DefaultCategoryDataset;
      

  3.   

    试试这个
    import java.awt.Font;Font font = new Font("宋体", Font.BOLD, 16); 
    txtTitle.setFont(font); 
    jc.getLegend().setItemFont(font);
    红色的部分根据你的报表里要显示中文的地方设置一下字体
      

  4.   


    import org.jfree.chart.title.TextTitle;
    import java.awt.Font; 
    CategoryDataset dataset = getDataSet2();
    JFreeChart chart = ChartFactory.createBarChart3D(
                                "Fruit product", // 图表标题
                                "水果", // 目录轴的显示标签
                                "产量", // 数值轴的显示标签
                                dataset, // 数据集
                                PlotOrientation.HORIZONTAL, // 图表方向:水平、垂直
                                true,     // 是否显示图例(对于简单的柱状图必须是false)
                                false,     // 是否生成工具
                                false     // 是否生成URL链接
                                ); 
    Font font = new Font("宋体", Font.BOLD, 16); 
    TextTitle txtTitle = chart.getTitle();   
    txtTitle.setFont(font);  
    PiePlot pieplot = (PiePlot)chart.getPlot();//这里你照着你所要导出的图形类别替换一下PiePlot试试
    pieplot.setLabelFont(font); 
    chart.getLegend().setItemFont(font); 
    LZ我不知道你自己有没有在网上好好搜搜这个问题的原因
    网上有不少解决这个问题的讨论
    不妨多看一下多试一下
      

  5.   

    不应该吧
    我没有碰到过这种问题,我的用法就是上面设置font。
    其实网上的解决办法都差不多
    1.版本问题,这个你试着低版本没有问题码?
    2.就是上面要加font设置
    3.操作系统问题,这个LZ可能没有涉及
    其实个人认为这个也不至于无解啊
      

  6.   

    sorry,zhangpeixv 你的办法是可行的,我用的时候没有用对,现在标题和表示颜色的部分都已经正常显示中文了,但是横轴和纵轴两个方向上的仍然是方框,我试了半天还没有找到相关属性,不过非常感谢你的回答,谢谢!
      

  7.   

    plot.getDomainAxis().setLabelFont(font);//设置横坐标说明的字体
    plot.getDomainAxis().setTickLabelFont(font);//设置横坐标字体
    plot.getRangeAxis().setLabelFont(font);//设置纵坐标说明的字体
    此外,源码是最全的了
    类似设置的问题,一般的话看源码都能找到线索的