JFreeChart_GUI_Demo

package demo;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.text.NumberFormat;
import java.util.HashMap;
import java.util.Map;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardCategoryToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.DatasetRenderingOrder;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.category.SlidingCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

/**
 * SlidingCategoryDataset 作为报表的数据源,用于解决数据过多时界面显示不友好的问题
 *
 * SlidingCategoryDataset可以设置当前展示的数据区域,new SlidingCategoryDataset(dataSet, fristCount, maxCount);
 * dataSet一个数据源的 全量数据或者称之为:The underlying dataSet.
 * fristCount当前展示区域里的第一个数据的下标:The index of the first category to present.
 * 当前展示区域展示X刻度的刻度点数。即一屏可展示的数据个数:The maximum number of categories to present.
 *
 *
 * 1.对数据要求,不同数据源的的数据必须 是全量的.如:一个数据源是:{34,24,45,67,78}则另一个数据源没有数据的地方要补空点{null,35,null,45,null}
 * 2.现在还存在两个问题,图例过多,界面展示不友好(可以隐藏或显示图例),现在支持最多十个数据源的处理,即十个坐标轴的处理
 *
 */
public class SlidingCategoryDatasetDemoBar extends ApplicationFrame
{
 /**
     *
     */
 private static final long serialVersionUID = -7746907151793280228L;

 public static class MyDemoPanel extends JPanel implements ChangeListener
 {
  /**
         *
         */
  private static final long serialVersionUID = -7070795661230060670L;

  Map<Integer, Integer> countMap = new HashMap<Integer, Integer>();
  JScrollBar scroller;
  JScrollBar scroller2;
  SlidingCategoryDataset dataset1;
  SlidingCategoryDataset dataset2;
  SlidingCategoryDataset dataset3;
  SlidingCategoryDataset dataset4;
  SlidingCategoryDataset dataset5;
  SlidingCategoryDataset dataset6;
  SlidingCategoryDataset dataset7;
  SlidingCategoryDataset dataset8;
  SlidingCategoryDataset dataset9;
  SlidingCategoryDataset dataset10;

  Map<Integer, CategoryDataset> datasetMap = new HashMap<Integer, CategoryDataset>();

  private int dCount;

  public MyDemoPanel(int dCount)
  {
   super(new BorderLayout());
   setCount(dCount);
   initMap();
   createAllDataset((Integer) countMap.get(dCount).intValue());
   JFreeChart localJFreeChart = createChart(datasetMap, dCount);
   ChartPanel localChartPanel = new ChartPanel(localJFreeChart);
   localChartPanel.setPreferredSize(new Dimension(400, 400));
   scroller = new JScrollBar(0, 0, (Integer) countMap.get(dCount).intValue(), 0, 100);
   scroller.getModel().addChangeListener(this);
   JPanel localJPanel = new JPanel(new BorderLayout());
   localJPanel.add(scroller);
   localJPanel.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));

   // scroller2 = new JScrollBar(1, 0, (Integer) countMap.get(6).intValue(), 0, 100);
   // scroller2.getModel().addChangeListener(this);
   // JPanel localJPanel2 = new JPanel(new BorderLayout());
   // localJPanel2.add(scroller2);
   // localJPanel2.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));

   localJPanel.setBackground(Color.white);
   add(localChartPanel, BorderLayout.CENTER);
   add(localJPanel, BorderLayout.SOUTH);
   // add(localJPanel2, BorderLayout.EAST);

  }

  private void setCount(int dCount)
  {
   this.dCount = dCount;
  }

  private void initMap()
  {
   countMap.put(1, 10);
   countMap.put(2, 16);
   countMap.put(3, 10);
   countMap.put(4, 8);
   countMap.put(5, 6);
   countMap.put(6, 5);
   countMap.put(7, 4);
   countMap.put(8, 4);
   countMap.put(9, 3);
   countMap.put(10, 3);
  }

  private void createAllDataset(int maxCount)
  {
   dataset1 = new SlidingCategoryDataset(createDataset(100.0D, 1), 0, maxCount);
   dataset2 = new SlidingCategoryDataset(createDataset(50.0D, 2), 0, maxCount);
   dataset3 = new SlidingCategoryDataset(createDataset(36.0D, 3), 0, maxCount);
   dataset4 = new SlidingCategoryDataset(createDataset(78.0D, 4), 0, maxCount);
   dataset5 = new SlidingCategoryDataset(createDataset(89.0D, 5), 0, maxCount);
   dataset6 = new SlidingCategoryDataset(createDataset(158.0D, 6), 0, maxCount);
   dataset7 = new SlidingCategoryDataset(createDataset(250.0D, 7), 0, maxCount);
   dataset8 = new SlidingCategoryDataset(createDataset(436.0D, 8), 0, maxCount);
   dataset9 = new SlidingCategoryDataset(createDataset(378.0D, 9), 0, maxCount);
   dataset10 = new SlidingCategoryDataset(createDataset(789.0D, 10), 0, maxCount);

   datasetMap.put(0, dataset1);
   datasetMap.put(1, dataset2);
   datasetMap.put(2, dataset3);
   datasetMap.put(3, dataset4);
   datasetMap.put(4, dataset5);
   datasetMap.put(5, dataset6);
   datasetMap.put(6, dataset7);
   datasetMap.put(7, dataset8);
   datasetMap.put(8, dataset9);
   datasetMap.put(9, dataset10);
  }

  private static CategoryDataset createDataset(double max, int index)
  {
   DefaultCategoryDataset localDefaultCategoryDataset = new DefaultCategoryDataset();
   for (int i = 0 ; i < 100 ; i++)
    localDefaultCategoryDataset.addValue(Math.random() * max, "Series" + index, "S" + i);
   return localDefaultCategoryDataset;
  }

  private static JFreeChart createChart(Map<Integer, CategoryDataset> datasetMap, int dCount)
  {
   NumberAxis numberAxis = new NumberAxis("Series1");
   CategoryAxis rangeAxis = new CategoryAxis("Label");
   CategoryPlot categoryPlot = new CategoryPlot(datasetMap.get(0), rangeAxis, numberAxis, new BarRendererEx());

   JFreeChart localJFreeChart = new JFreeChart("SlidingCategoryDatasetDemo2", new Font(Font.SERIF, Font.PLAIN, 22), categoryPlot, true);

   ChartUtilities.applyCurrentTheme(localJFreeChart);
   CategoryPlot localCategoryPlot = (CategoryPlot) localJFreeChart.getPlot();

   for (int i = 1 ; i < dCount ; i++)
   {
    addOtherDataset(datasetMap.get(i), localCategoryPlot, i);
   }

   setDomainAxisStyle(localCategoryPlot);
   setRangeAxisStyle(localCategoryPlot);
   setRendererStyle(localCategoryPlot);
   
   LegendTitle localLegendTitle = (LegendTitle) localJFreeChart.getSubtitle(0);
   // localLegendTitle.setPosition(RectangleEdge.BOTTOM);
   localLegendTitle.setVisible(false);
   
   // localCategoryPlot.setDomainGridlinePaint(Color.gray);
   // localCategoryPlot.setRangeGridlinePaint(Color.gray);
   // localCategoryPlot.setBackgroundPaint(Color.white);
   // localCategoryPlot.setRangeGridlinesVisible(true);
   // localCategoryPlot.setDomainGridlinesVisible(true);

   return localJFreeChart;
  }

  private static void setRendererStyle(CategoryPlot localCategoryPlot)
  {

   for (int i = 0 ; i < localCategoryPlot.getRendererCount() ; i++)
   {
    BarRenderer localBarRenderer = (BarRenderer) localCategoryPlot.getRenderer(i);
    localBarRenderer.setBase(0.000000000000000000001D);
    localBarRenderer.setMaximumBarWidth(0.024D);
    localBarRenderer.setMinimumBarLength(0.99999999D);
    localBarRenderer.setItemMargin(0.2000000000000000000001D);
    localBarRenderer.setIncludeBaseInRange(true);
    localBarRenderer.setDrawBarOutline(true);
    localBarRenderer.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator("[{0}, {1}] = {2}", NumberFormat.getNumberInstance()));
    localCategoryPlot.setRenderer(i, localBarRenderer);
   }

  }

  private static void setRangeAxisStyle(CategoryPlot localCategoryPlot)
  {
   for (int i = 0 ; i < localCategoryPlot.getRangeAxisCount() ; i++)
   {
    NumberAxis localNumberAxis = (NumberAxis) localCategoryPlot.getRangeAxis(i);
    localNumberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
    localNumberAxis.setLabelFont(new Font(Font.DIALOG, Font.PLAIN, 12));
    localNumberAxis.setTickLabelFont(new Font(Font.DIALOG, Font.PLAIN, 12));
    localNumberAxis.setLabelPaint(Color.black);
    localNumberAxis.setTickLabelPaint(Color.black);
   }
  }

  private static void setDomainAxisStyle(CategoryPlot localCategoryPlot)
  {
   CategoryAxis localCategoryAxis = localCategoryPlot.getDomainAxis();
   localCategoryAxis.setMaximumCategoryLabelWidthRatio(0.8F);
   localCategoryAxis.setLowerMargin(0.02D);
   localCategoryAxis.setUpperMargin(0.02D);
   localCategoryAxis.setLabelFont(new Font(Font.DIALOG, Font.PLAIN, 12));
   localCategoryAxis.setTickLabelFont(new Font(Font.DIALOG, Font.PLAIN, 12));
   localCategoryAxis.setLabelPaint(Color.black);
   localCategoryAxis.setTickLabelPaint(Color.black);
   localCategoryAxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_45);
  }

  private static void addOtherDataset(CategoryDataset dataset, CategoryPlot localCategoryPlot, int index)
  {
   BarRendererEx renderer = new BarRendererEx(index);
   NumberAxis valueAxis = new NumberAxis("Series" + (index + 1));
   localCategoryPlot.setRangeAxis(index, valueAxis);
   localCategoryPlot.setDataset(index, dataset);
   localCategoryPlot.mapDatasetToRangeAxis(index, index);
   localCategoryPlot.setRenderer(index, renderer);
   localCategoryPlot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);

   if (index % 2 == 0)
   {
    localCategoryPlot.setRangeAxisLocation(index, AxisLocation.BOTTOM_OR_LEFT);
   }
   else
   {
    localCategoryPlot.setRangeAxisLocation(index, AxisLocation.BOTTOM_OR_RIGHT);
   }
  }

  public void stateChanged(ChangeEvent paramChangeEvent)
  {
   for (int i = 0 ; i < dCount ; i++)
   {
    ((SlidingCategoryDataset) datasetMap.get(i)).setFirstCategoryIndex(scroller.getValue());
   }
  }
 }

 public SlidingCategoryDatasetDemoBar(String paramString, int count)
 {
  super(paramString);
  setDefaultCloseOperation(3);
  setContentPane(createDemoPanel(count));
 }

 public static JPanel createDemoPanel(int count)
 {
  return new SlidingCategoryDatasetDemoBar.MyDemoPanel(count);
 }

 public static void main(String[] paramArrayOfString)
 {
  SlidingCategoryDatasetDemoBar localSlidingCategoryDatasetDemo2 = new SlidingCategoryDatasetDemoBar("JFreeChart: SlidingCategoryDatasetDemo2.java", 6);
  localSlidingCategoryDatasetDemo2.pack();
  RefineryUtilities.centerFrameOnScreen(localSlidingCategoryDatasetDemo2);
  localSlidingCategoryDatasetDemo2.setVisible(true);
  localSlidingCategoryDatasetDemo2.setExtendedState(JFrame.MAXIMIZED_BOTH);
 }

}

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

package demo;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.text.NumberFormat;
import java.util.HashMap;
import java.util.Map;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardCategoryToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.DatasetRenderingOrder;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.category.SlidingCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

/**
 * SlidingCategoryDataset 作为报表的数据源,用于解决数据过多时界面显示不友好的问题
 *
 * SlidingCategoryDataset可以设置当前展示的数据区域,new SlidingCategoryDataset(dataSet, fristCount, maxCount);
 * dataSet一个数据源的 全量数据或者称之为:The underlying dataSet.
 * fristCount当前展示区域里的第一个数据的下标:The index of the first category to present.
 * 当前展示区域展示X刻度的刻度点数。即一屏可展示的数据个数:The maximum number of categories to present.
 *
 *
 * 1.对数据要求,不同数据源的的数据必须 是全量的.如:一个数据源是:{34,24,45,67,78}则另一个数据源没有数据的地方要补空点{null,35,null,45,null}
 * 2.现在还存在两个问题,图例过多,界面展示不友好(可以隐藏或显示图例),现在支持最多十个数据源的处理,即十个坐标轴的处理
 *
 */
public class SlidingCategoryDatasetDemoLine extends ApplicationFrame
{
 /**
     *
     */
 private static final long serialVersionUID = -7746907151793280228L;

 public static class MyDemoPanel extends JPanel implements ChangeListener
 {
  /**
         *
         */
  private static final long serialVersionUID = -7070795661230060670L;
  Map<Integer, Integer> countMap = new HashMap<Integer, Integer>();
  JScrollBar scroller;
  JScrollBar scroller2;
  SlidingCategoryDataset dataset1;
  SlidingCategoryDataset dataset2;
  SlidingCategoryDataset dataset3;
  SlidingCategoryDataset dataset4;
  SlidingCategoryDataset dataset5;
  SlidingCategoryDataset dataset6;
  Map<Integer, CategoryDataset> datasetMap = new HashMap<Integer, CategoryDataset>();

  private int dCount;

  public MyDemoPanel(int dCount)
  {
   super(new BorderLayout());
   setCount(dCount);
   initMap();
   createAllDataset((Integer) countMap.get(1).intValue());
   JFreeChart localJFreeChart = createChart(datasetMap, dCount);
   ChartPanel localChartPanel = new ChartPanel(localJFreeChart);
   localChartPanel.setPreferredSize(new Dimension(400, 400));
   scroller = new JScrollBar(0, 0, (Integer) countMap.get(1).intValue(), 0, 200);
   scroller.getModel().addChangeListener(this);
   JPanel localJPanel = new JPanel(new BorderLayout());
   localJPanel.add(scroller);
   localJPanel.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));

   // int count = localJFreeChart.getPlot().getLegendItems().getItemCount();
   // int height = (count / 4) * 40;
   // localChartPanel.setMinimumDrawHeight(localChartPanel.getHeight() + height);
   // localChartPanel.setMinimumDrawWidth(1440);

   // scroller2 = new JScrollBar(1, 0, 10, 0, localChartPanel.getHeight() + height);
   // scroller2.getModel().addChangeListener(this);
   // JPanel localJPanel2 = new JPanel(new BorderLayout());
   // localJPanel2.add(scroller2);
   // localJPanel2.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
   localJPanel.setBackground(Color.white);
   add(localChartPanel, BorderLayout.CENTER);
   add(localJPanel, BorderLayout.SOUTH);
   // add(localJPanel2, BorderLayout.EAST);
  }

  private void initMap()
  {
   countMap.put(1, 10);
   countMap.put(2, 16);
   countMap.put(3, 10);
   countMap.put(4, 8);
   countMap.put(5, 6);
   countMap.put(6, 5);
   countMap.put(7, 4);
   countMap.put(8, 4);
   countMap.put(9, 4);
   countMap.put(10, 3);
  }

  private void setCount(int dCount)
  {
   this.dCount = dCount;
  }

  private void createAllDataset(int maxCount)
  {
   dataset1 = new SlidingCategoryDataset(createDataset(134.0D, 1), 0, maxCount);
   dataset2 = new SlidingCategoryDataset(createDataset(234.0D, 2), 0, maxCount);
   dataset3 = new SlidingCategoryDataset(createDataset(65.0D, 3), 0, maxCount);
   dataset4 = new SlidingCategoryDataset(createDataset(89.0D, 4), 0, maxCount);
   dataset5 = new SlidingCategoryDataset(createDataset(48.0D, 5), 0, maxCount);
   dataset6 = new SlidingCategoryDataset(createDataset(453.0D, 6), 0, maxCount);

   datasetMap.put(0, dataset1);
   datasetMap.put(1, dataset2);
   datasetMap.put(2, dataset3);
   datasetMap.put(3, dataset4);
   datasetMap.put(4, dataset5);
   datasetMap.put(5, dataset6);

  }

  private static CategoryDataset createDataset(double max, int index)
  {
   DefaultCategoryDataset localDefaultCategoryDataset = new DefaultCategoryDataset();
   for (int i = 0 ; i < 200 ; i++)
    localDefaultCategoryDataset.addValue(Math.random() * max, "Series" + index, "S" + i);
   // localDefaultCategoryDataset.addValue(Math.random() * max, "Series" + index + "-Counter" + i, "S" + i);
   return localDefaultCategoryDataset;
  }

  private static JFreeChart createChart(Map<Integer, CategoryDataset> datasetMap, int dCount)
  {
   JFreeChart localJFreeChart = ChartFactory.createLineChart("SlidingCategoryDatasetDemo2", "Label", "Series1", datasetMap.get(0),
           PlotOrientation.VERTICAL, true, true, true);
   CategoryPlot localCategoryPlot = (CategoryPlot) localJFreeChart.getPlot();

   for (int i = 1 ; i < dCount ; i++)
   {
    addOtherDataset(datasetMap.get(i), localCategoryPlot, i);
   }

   setDomainAxisStyle(localCategoryPlot);
   setRangeAxisStyle(localCategoryPlot);
   setRendererStyle(localCategoryPlot);

   LegendTitle localLegendTitle = (LegendTitle) localJFreeChart.getSubtitle(0);
   // localLegendTitle.setPosition(RectangleEdge.BOTTOM);
   localLegendTitle.setVisible(true);

   // localCategoryPlot.setDomainGridlinePaint(Color.gray);
   // localCategoryPlot.setRangeGridlinePaint(Color.gray);
   // localCategoryPlot.setBackgroundPaint(Color.white);
   // localCategoryPlot.setRangeGridlinesVisible(true);
   // localCategoryPlot.setDomainGridlinesVisible(true);

   return localJFreeChart;
  }

  private static void setRendererStyle(CategoryPlot localCategoryPlot)
  {

   for (int i = 0 ; i < localCategoryPlot.getRendererCount() ; i++)
   {
    LineAndShapeRenderer localBarRenderer = (LineAndShapeRenderer) localCategoryPlot.getRenderer(i);
    localBarRenderer.setBaseShapesVisible(true);
    localBarRenderer.setItemMargin(0.2000000000000000000001D);
    localBarRenderer.setBaseSeriesVisible(true);
    localBarRenderer.setBaseLinesVisible(true);
    localBarRenderer.setUseFillPaint(false);
    localBarRenderer.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator("[{0}, {1}] = {2}", NumberFormat.getNumberInstance()));
    localCategoryPlot.setRenderer(i, localBarRenderer);
   }

  }

  private static void setRangeAxisStyle(CategoryPlot localCategoryPlot)
  {
   for (int i = 0 ; i < localCategoryPlot.getRangeAxisCount() ; i++)
   {
    NumberAxis localNumberAxis = (NumberAxis) localCategoryPlot.getRangeAxis(i);
    localNumberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
    localNumberAxis.setLabelFont(new Font(Font.DIALOG, Font.PLAIN, 12));
    localNumberAxis.setTickLabelFont(new Font(Font.DIALOG, Font.PLAIN, 12));
    localNumberAxis.setLabelPaint(Color.black);
    localNumberAxis.setTickLabelPaint(Color.black);
   }
  }

  private static void setDomainAxisStyle(CategoryPlot localCategoryPlot)
  {
   CategoryAxis localCategoryAxis = localCategoryPlot.getDomainAxis();
   localCategoryAxis.setMaximumCategoryLabelWidthRatio(0.8F);
   localCategoryAxis.setLowerMargin(0.02D);
   localCategoryAxis.setUpperMargin(0.02D);
   localCategoryAxis.setLabelFont(new Font(Font.DIALOG, Font.PLAIN, 12));
   localCategoryAxis.setTickLabelFont(new Font(Font.DIALOG, Font.PLAIN, 12));
   localCategoryAxis.setLabelPaint(Color.black);
   localCategoryAxis.setTickLabelPaint(Color.black);
   localCategoryAxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_45);
  }

  private static void addOtherDataset(CategoryDataset paramCategoryDataset2, CategoryPlot localCategoryPlot, int index)
  {
   LineAndShapeRenderer renderer = new LineAndShapeRenderer();
   NumberAxis valueAxis = new NumberAxis("Series" + (index + 1));
   localCategoryPlot.setRangeAxis(index, valueAxis);
   localCategoryPlot.setDataset(index, paramCategoryDataset2);
   localCategoryPlot.mapDatasetToRangeAxis(index, index);
   localCategoryPlot.setRenderer(index, renderer);
   localCategoryPlot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);

   if (index % 2 == 0)
   {
    localCategoryPlot.setRangeAxisLocation(index, AxisLocation.BOTTOM_OR_LEFT);
   }
   else
   {
    localCategoryPlot.setRangeAxisLocation(index, AxisLocation.BOTTOM_OR_RIGHT);
   }
  }

  public void stateChanged(ChangeEvent paramChangeEvent)
  {
   for (int i = 0 ; i < dCount ; i++)
   {
    ((SlidingCategoryDataset) datasetMap.get(i)).setFirstCategoryIndex(scroller.getValue());
   }
  }

 }

 public SlidingCategoryDatasetDemoLine(String paramString, int dCount)
 {
  super(paramString);
  setDefaultCloseOperation(3);
  setContentPane(createDemoPanel(dCount));
 }

 public static JPanel createDemoPanel(int dCount)
 {
  return new SlidingCategoryDatasetDemoLine.MyDemoPanel(dCount);
 }

 public static void main(String[] paramArrayOfString)
 {
  SlidingCategoryDatasetDemoLine localSlidingCategoryDatasetDemo2 = new SlidingCategoryDatasetDemoLine("JFreeChart: SlidingCategoryDatasetDemo2.java", 3);
  localSlidingCategoryDatasetDemo2.pack();
  RefineryUtilities.centerFrameOnScreen(localSlidingCategoryDatasetDemo2);
  localSlidingCategoryDatasetDemo2.setVisible(true);
  localSlidingCategoryDatasetDemo2.setExtendedState(JFrame.MAXIMIZED_BOTH);
 }

}

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

package demo;

import java.awt.geom.Rectangle2D;

import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.CategoryItemRendererState;

public class BarRendererEx extends BarRenderer
{

 /**
     *
     */
 private static final long serialVersionUID = 7795404500894645538L;

 private int index = 0;

 public BarRendererEx()
 {}

 public BarRendererEx(int index)
 {
  this.index = index;
 }

 @Override
 protected double calculateBarW0(CategoryPlot plot, PlotOrientation orientation, Rectangle2D dataArea, CategoryAxis domainAxis,
         CategoryItemRendererState state, int row, int column)
 {

  double space = 0.0;
  if (orientation == PlotOrientation.HORIZONTAL)
  {
   space = dataArea.getHeight();
  }
  else
  {
   space = dataArea.getWidth();
  }
  double barW0 = domainAxis.getCategoryStart(column, getColumnCount(), dataArea, plot.getDomainAxisEdge());

  int rendererCount = plot.getRendererCount();
  int seriesCount = state.getVisibleSeriesCount() >= 0 ? state.getVisibleSeriesCount() : getRowCount();
  int categoryCount = getColumnCount();
  if (rendererCount > 1)
  {
   barW0 = barW0 + (row + index) * state.getBarWidth() + 0.79999999999D;
  }
  else
  {
   if (seriesCount > 1)
   {
    double seriesGap = space * getItemMargin() / (categoryCount * (seriesCount - 1));
    double seriesW = calculateSeriesWidth(space, domainAxis, categoryCount, seriesCount);
    barW0 = barW0 + row * (seriesW + seriesGap) + (seriesW / 2.0) - (state.getBarWidth() / 2.0);
   }
   else
   {
    barW0 = domainAxis.getCategoryMiddle(column, getColumnCount(), dataArea, plot.getDomainAxisEdge()) - state.getBarWidth() / 2.0;
   }
  }

  return barW0;
 }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值