先简单介绍一下目前程序情况: 多个图表(Plot)按网格布局组成的一个大Panel;图例是由plot自动生成;
问题:如果是由plot自动生成的话,那么会有多个图例对应多个图表;
可我想实现的是整体的图例,那么图例应该怎么放?怎样对应呢(对应某一个图表好象不太好)?附加一个小问题:在JFreeChart中可以设置标题可见吗?好象没找到.

解决方案 »

  1.   

    在JFreeChart中可以设置标题可见.
      

  2.   

    恩,可以在JFreeChart中自带编辑.
    但是需要自己控制呢?不知道到底操作哪个对象;
      

  3.   

    这个问题我一个同事前阵子也遇见了,具体怎么解决的我不是很清楚。我给你一个例子,是用饼图实现的,可以参考一下
    package demo;import java.awt.Dimension;
    import java.awt.Font;
    import javax.swing.JPanel;
    import org.jfree.chart.*;
    import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
    import org.jfree.chart.plot.MultiplePiePlot;
    import org.jfree.chart.plot.PiePlot;
    import org.jfree.data.category.CategoryDataset;
    import org.jfree.data.general.DatasetUtilities;
    import org.jfree.ui.ApplicationFrame;
    import org.jfree.ui.RefineryUtilities;
    import org.jfree.util.TableOrder;public class MultiplePieChartDemo1 extends ApplicationFrame
    { public MultiplePieChartDemo1(String s)
    {
    super(s);
    JPanel jpanel = createDemoPanel();
    jpanel.setPreferredSize(new Dimension(600, 380));
    setContentPane(jpanel);
    } private static CategoryDataset createDataset()
    {
    double ad[][] = {
    {
    3D, 4D, 3D, 5D
    }, {
    5D, 7D, 6D, 8D
    }, {
    5D, 7D, (0.0D / 0.0D), 3D
    }, {
    1.0D, 2D, 3D, 4D
    }, {
    2D, 3D, 2D, 3D
    }
    };
    CategoryDataset categorydataset = DatasetUtilities.createCategoryDataset("Region ", "Sales/Q", ad);
    return categorydataset;
    } private static JFreeChart createChart(CategoryDataset categorydataset)
    {
    JFreeChart jfreechart = ChartFactory.createMultiplePieChart("Multiple Pie Chart", categorydataset, TableOrder.BY_ROW, true, true, false);
    MultiplePiePlot multiplepieplot = (MultiplePiePlot)jfreechart.getPlot();
    JFreeChart jfreechart1 = multiplepieplot.getPieChart();
    PiePlot pieplot = (PiePlot)jfreechart1.getPlot();
    pieplot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}"));
    pieplot.setLabelFont(new Font("SansSerif", 0, 8));
    return jfreechart;
    } public static JPanel createDemoPanel()
    {
    JFreeChart jfreechart = createChart(createDataset());
    return new ChartPanel(jfreechart);
    } public static void main(String args[])
    {
    MultiplePieChartDemo1 multiplepiechartdemo1 = new MultiplePieChartDemo1("Multiple Pie Chart Demo 1");
    multiplepiechartdemo1.pack();
    RefineryUtilities.centerFrameOnScreen(multiplepiechartdemo1);
    multiplepiechartdemo1.setVisible(true);
    }
    }
      

  4.   

    现在CSDN上,交流JFreeChart的人很少.有没有人知道JFreeChart方面比较强的论坛,或能交流的QQ群?
      

  5.   

      /**
                 * all LegendTitles.
                 */
                BlockContainer blockcontainer = new BlockContainer(new BorderArrangement());
                
                /**
                 * XYPlot
                 */
                for (int i = 0; i < axydataset.length; i++) {
                    XYItemRenderer standardxyitemrenderer1;
                    standardxyitemrenderer1 = jfreechart.getXYPlot().getRenderer();
                    standardxyitemrenderer1.setStroke(new BasicStroke(0.5f));
                    if (standardxyitemrenderer1 instanceof XYLineAndShapeRenderer) {
                        XYLineAndShapeRenderer xylineandshaperenderer = (
                         XYLineAndShapeRenderer) standardxyitemrenderer1;
                            xylineandshaperenderer.setShape(new CurveCircle( -1.0d,
                                -1.0d, 2.0d));
                            xylineandshaperenderer.setBaseShapesVisible(true);
                            xylineandshaperenderer.setBaseShapesFilled(false);
                            xylineandshaperenderer.setBaseItemLabelsVisible(true);
                            
                    }
                    /**
                     * setting subtitle
                     */
                    LegendTitle legendtitle = new LegendTitle(standardxyitemrenderer1);
                    legendtitle.setMargin(new RectangleInsets(2D, 2D, 2D, 2D));
                    legendtitle.setBorder(new BlockBorder());
                    if (i % 2 == 0) {
                        blockcontainer.add(legendtitle, RectangleEdge.RIGHT);
                    } 
                    else {
                        blockcontainer.add(legendtitle, RectangleEdge.LEFT);
                    }
                }
    我也在弄这个类似的问题啊,你所说的问题,我觉得跟我刚解决掉的差不多,发来跟你交流下!!!