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;
}
}