extendedstackedbarrenderer.java
来自「Jfreechart 源码例子 是和jfreechart developmen」· Java 代码 · 共 218 行
JAVA
218 行
package demo;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.geom.Rectangle2D;
import java.awt.geom.Rectangle2D.Double;
import java.text.NumberFormat;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.entity.CategoryItemEntity;
import org.jfree.chart.entity.ChartEntity;
import org.jfree.chart.entity.EntityCollection;
import org.jfree.chart.labels.CategoryItemLabelGenerator;
import org.jfree.chart.labels.CategoryToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.CategoryItemRendererState;
import org.jfree.chart.renderer.category.StackedBarRenderer;
import org.jfree.chart.urls.CategoryURLGenerator;
import org.jfree.data.category.CategoryDataset;
import org.jfree.text.TextUtilities;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.TextAnchor;
public class ExtendedStackedBarRenderer extends StackedBarRenderer
{
private boolean showPositiveTotal = true;
private boolean showNegativeTotal = true;
private Font totalLabelFont = new Font("SansSerif", 1, 12);
private NumberFormat totalFormatter = NumberFormat.getInstance();
public NumberFormat getTotalFormatter()
{
return this.totalFormatter;
}
public void setTotalFormatter(NumberFormat paramNumberFormat)
{
if (paramNumberFormat == null)
throw new IllegalArgumentException("Null format not permitted.");
this.totalFormatter = paramNumberFormat;
}
public void drawItem(Graphics2D paramGraphics2D, CategoryItemRendererState paramCategoryItemRendererState, Rectangle2D paramRectangle2D, CategoryPlot paramCategoryPlot, CategoryAxis paramCategoryAxis, ValueAxis paramValueAxis, CategoryDataset paramCategoryDataset, int paramInt1, int paramInt2, int paramInt3)
{
double d5;
double d6;
double d9;
float f1;
float f2;
Object localObject;
Number localNumber1 = paramCategoryDataset.getValue(paramInt1, paramInt2);
if (localNumber1 == null)
return;
double d1 = localNumber1.doubleValue();
PlotOrientation localPlotOrientation = paramCategoryPlot.getOrientation();
double d2 = paramCategoryAxis.getCategoryMiddle(paramInt2, getColumnCount(), paramRectangle2D, paramCategoryPlot.getDomainAxisEdge()) - paramCategoryItemRendererState.getBarWidth() / 2.0D;
double d3 = 0D;
double d4 = 0D;
for (int i = 0; i < paramInt1; ++i)
{
Number localNumber2 = paramCategoryDataset.getValue(i, paramInt2);
if (localNumber2 != null)
{
d6 = localNumber2.doubleValue();
if (d6 > 0D)
d3 += d6;
else
d4 += d6;
}
}
RectangleEdge localRectangleEdge = paramCategoryPlot.getRangeAxisEdge();
if (d1 > 0D)
{
d5 = paramValueAxis.valueToJava2D(d3, paramRectangle2D, localRectangleEdge);
d6 = paramValueAxis.valueToJava2D(d3 + d1, paramRectangle2D, localRectangleEdge);
}
else
{
d5 = paramValueAxis.valueToJava2D(d4, paramRectangle2D, localRectangleEdge);
d6 = paramValueAxis.valueToJava2D(d4 + d1, paramRectangle2D, localRectangleEdge);
}
double d7 = Math.min(d5, d6);
double d8 = Math.max(Math.abs(d6 - d5), getMinimumBarLength());
Rectangle2D.Double localDouble = null;
if (localPlotOrientation == PlotOrientation.HORIZONTAL)
localDouble = new Rectangle2D.Double(d7, d2, d8, paramCategoryItemRendererState.getBarWidth());
else
localDouble = new Rectangle2D.Double(d2, d7, paramCategoryItemRendererState.getBarWidth(), d8);
Paint localPaint = getItemPaint(paramInt1, paramInt2);
paramGraphics2D.setPaint(localPaint);
paramGraphics2D.fill(localDouble);
if ((isDrawBarOutline()) && (paramCategoryItemRendererState.getBarWidth() > 3.0D))
{
paramGraphics2D.setStroke(getItemStroke(paramInt1, paramInt2));
paramGraphics2D.setPaint(getItemOutlinePaint(paramInt1, paramInt2));
paramGraphics2D.draw(localDouble);
}
CategoryItemLabelGenerator localCategoryItemLabelGenerator = getItemLabelGenerator(paramInt1, paramInt2);
if ((localCategoryItemLabelGenerator != null) && (isItemLabelVisible(paramInt1, paramInt2)))
drawItemLabel(paramGraphics2D, paramCategoryDataset, paramInt1, paramInt2, paramCategoryPlot, localCategoryItemLabelGenerator, localDouble, false);
if (d1 > 0D)
{
if ((this.showPositiveTotal) && (isLastPositiveItem(paramCategoryDataset, paramInt1, paramInt2)))
{
paramGraphics2D.setPaint(Color.black);
paramGraphics2D.setFont(this.totalLabelFont);
d9 = calculateSumOfPositiveValuesForCategory(paramCategoryDataset, paramInt2);
f1 = (float)localDouble.getCenterX();
f2 = (float)localDouble.getMinY() - 4.0F;
localObject = TextAnchor.BOTTOM_CENTER;
if (localPlotOrientation == PlotOrientation.HORIZONTAL)
{
f1 = (float)localDouble.getMaxX() + 4.0F;
f2 = (float)localDouble.getCenterY();
localObject = TextAnchor.CENTER_LEFT;
}
TextUtilities.drawRotatedString(this.totalFormatter.format(d9), paramGraphics2D, f1, f2, (TextAnchor)localObject, 0D, TextAnchor.CENTER);
}
}
else if ((this.showNegativeTotal) && (isLastNegativeItem(paramCategoryDataset, paramInt1, paramInt2)))
{
paramGraphics2D.setPaint(Color.black);
paramGraphics2D.setFont(this.totalLabelFont);
d9 = calculateSumOfNegativeValuesForCategory(paramCategoryDataset, paramInt2);
f1 = (float)localDouble.getCenterX();
f2 = (float)localDouble.getMaxY() + 4.0F;
localObject = TextAnchor.TOP_CENTER;
if (localPlotOrientation == PlotOrientation.HORIZONTAL)
{
f1 = (float)localDouble.getMinX() - 4.0F;
f2 = (float)localDouble.getCenterY();
localObject = TextAnchor.CENTER_RIGHT;
}
TextUtilities.drawRotatedString(this.totalFormatter.format(d9), paramGraphics2D, f1, f2, (TextAnchor)localObject, 0D, TextAnchor.CENTER);
}
if (paramCategoryItemRendererState.getInfo() != null)
{
EntityCollection localEntityCollection = paramCategoryItemRendererState.getEntityCollection();
if (localEntityCollection != null)
{
String str1 = null;
CategoryToolTipGenerator localCategoryToolTipGenerator = getToolTipGenerator(paramInt1, paramInt2);
if (localCategoryToolTipGenerator != null)
str1 = localCategoryToolTipGenerator.generateToolTip(paramCategoryDataset, paramInt1, paramInt2);
String str2 = null;
if (getItemURLGenerator(paramInt1, paramInt2) != null)
str2 = getItemURLGenerator(paramInt1, paramInt2).generateURL(paramCategoryDataset, paramInt1, paramInt2);
localObject = new CategoryItemEntity(localDouble, str1, str2, paramCategoryDataset, paramCategoryDataset.getRowKey(paramInt1), paramCategoryDataset.getColumnKey(paramInt2));
localEntityCollection.add((ChartEntity)localObject);
}
}
}
private boolean isLastPositiveItem(CategoryDataset paramCategoryDataset, int paramInt1, int paramInt2)
{
int i = 1;
Number localNumber = paramCategoryDataset.getValue(paramInt1, paramInt2);
if (localNumber == null)
return false;
for (int j = paramInt1 + 1; j < paramCategoryDataset.getRowCount(); ++j)
{
localNumber = paramCategoryDataset.getValue(j, paramInt2);
if (localNumber != null)
i = ((i != 0) && (localNumber.doubleValue() <= 0D)) ? 1 : 0;
}
return i;
}
private boolean isLastNegativeItem(CategoryDataset paramCategoryDataset, int paramInt1, int paramInt2)
{
int i = 1;
Number localNumber = paramCategoryDataset.getValue(paramInt1, paramInt2);
if (localNumber == null)
return false;
for (int j = paramInt1 + 1; j < paramCategoryDataset.getRowCount(); ++j)
{
localNumber = paramCategoryDataset.getValue(j, paramInt2);
if (localNumber != null)
i = ((i != 0) && (localNumber.doubleValue() >= 0D)) ? 1 : 0;
}
return i;
}
private double calculateSumOfPositiveValuesForCategory(CategoryDataset paramCategoryDataset, int paramInt)
{
double d1 = 0D;
for (int i = 0; i < paramCategoryDataset.getRowCount(); ++i)
{
Number localNumber = paramCategoryDataset.getValue(i, paramInt);
if (localNumber != null)
{
double d2 = localNumber.doubleValue();
if (d2 > 0D)
d1 += d2;
}
}
return d1;
}
private double calculateSumOfNegativeValuesForCategory(CategoryDataset paramCategoryDataset, int paramInt)
{
double d1 = 0D;
for (int i = 0; i < paramCategoryDataset.getRowCount(); ++i)
{
Number localNumber = paramCategoryDataset.getValue(i, paramInt);
if (localNumber != null)
{
double d2 = localNumber.doubleValue();
if (d2 < 0D)
d1 += d2;
}
}
return d1;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?