📄 barrenderer.java
字号:
PlotOrientation orientation = plot.getOrientation();
if (orientation == PlotOrientation.HORIZONTAL) {
drawHorizontalItem(g2, dataArea, plot, domainAxis, rangeAxis, data, row, column);
}
else if (orientation == PlotOrientation.VERTICAL) {
drawVerticalItem(g2, dataArea, plot, domainAxis, rangeAxis, data, row, column);
}
}
/**
* Draws the bar for a single (series, category) data item.
*
* @param g2 the graphics device.
* @param dataArea the data area.
* @param plot the plot.
* @param domainAxis the domain axis.
* @param rangeAxis the range axis.
* @param data the data.
* @param row the row index (zero-based).
* @param column the column index (zero-based).
*/
protected void drawHorizontalItem(Graphics2D g2,
Rectangle2D dataArea,
CategoryPlot plot,
CategoryAxis domainAxis,
ValueAxis rangeAxis,
CategoryDataset dataset,
int row,
int column) {
// nothing is drawn for null values...
Number dataValue = dataset.getValue(row, column);
if (dataValue == null) {
return;
}
// X
double value = dataValue.doubleValue();
double base = 0.0;
double lclip = getLowerClip();
double uclip = getUpperClip();
if (uclip <= 0.0) { // cases 1, 2, 3 and 4
if (value >= uclip) {
return; // bar is not visible
}
base = uclip;
if (value <= lclip) {
value = lclip;
}
}
else if (lclip <= 0.0) { // cases 5, 6, 7 and 8
if (value >= uclip) {
value = uclip;
}
else {
if (value <= lclip) {
value = lclip;
}
}
}
else { // cases 9, 10, 11 and 12
if (value <= lclip) {
return; // bar is not visible
}
base = lclip;
if (value >= uclip) {
value = uclip;
}
}
RectangleEdge edge = plot.getRangeAxisEdge();
double transX1 = rangeAxis.translateValueToJava2D(base, dataArea, edge);
double transX2 = rangeAxis.translateValueToJava2D(value, dataArea, edge);
double rectX = Math.min(transX1, transX2);
double rectWidth = Math.abs(transX2 - transX1);
// Y
double rectY = domainAxis.getCategoryStart(column, getColumnCount(), dataArea,
plot.getDomainAxisEdge());
int seriesCount = getRowCount();
int categoryCount = getColumnCount();
if (seriesCount > 1) {
double seriesGap = dataArea.getHeight() * getItemMargin()
/ (categoryCount * (seriesCount - 1));
rectY = rectY + row * (getBarWidth() + seriesGap);
}
else {
rectY = rectY + row * getBarWidth();
}
// draw the bar...
double rectHeight = getBarWidth();
Rectangle2D bar = new Rectangle2D.Double(rectX, rectY, rectWidth, rectHeight);
g2.setPaint(getItemPaint(row, column));
g2.fill(bar);
// draw the outline...
if (isDrawBarOutline() && getBarWidth() > BAR_OUTLINE_WIDTH_THRESHOLD) {
Stroke stroke = getItemOutlineStroke(row, column);
Paint paint = getItemOutlinePaint(row, column);
if (stroke != null && paint != null) {
g2.setStroke(stroke);
g2.setPaint(paint);
g2.draw(bar);
}
}
CategoryItemLabelGenerator generator = getItemLabelGenerator(row, column);
if (generator != null && isItemLabelVisible(row, column)) {
drawItemLabel(g2, dataset, row, column, plot, generator, bar, (transX1 > transX2));
}
// collect entity and tool tip information...
if (getInfo() != null) {
EntityCollection entities = getInfo().getEntityCollection();
if (entities != null) {
String tip = null;
if (generator != null) {
tip = generator.generateToolTip(dataset, row, column);
}
String url = null;
if (getItemURLGenerator(row, column) != null) {
url = getItemURLGenerator(row, column).generateURL(dataset, row, column);
}
CategoryItemEntity entity = new CategoryItemEntity(
bar, tip, url, dataset, row, dataset.getColumnKey(column), column
);
entities.addEntity(entity);
}
}
}
/**
* Draws an item label.
*
* @param g2 the graphics device.
* @param data the dataset.
* @param row the row.
* @param column the column.
* @param plot the plot.
* @param generator the label generator.
* @param bar the bar.
* @param negative a flag indicating a negative value.
*/
protected void drawItemLabel(Graphics2D g2,
CategoryDataset data,
int row,
int column,
CategoryPlot plot,
CategoryItemLabelGenerator generator,
Rectangle2D bar,
boolean negative) {
// draw the item labels if there are any...
Font labelFont = getItemLabelFont(row, column);
g2.setFont(labelFont);
Paint paint = getItemLabelPaint(row, column);
g2.setPaint(paint);
String label = generator.generateItemLabel(data, row, column);
// get the label anchor..
ItemLabelAnchor labelAnchor = getItemLabelAnchor(row, column);
TextAnchor textAnchor = getItemLabelTextAnchor(row, column);
TextAnchor rotationAnchor = getItemLabelRotationAnchor(row, column);
double angle = getItemLabelAngle(row, column).doubleValue();
if (negative) {
labelAnchor = ItemLabelAnchor.getHorizontalOpposite(labelAnchor);
textAnchor = TextAnchor.getHorizontalOpposite(textAnchor);
rotationAnchor = TextAnchor.getHorizontalOpposite(rotationAnchor);
}
// work out the label anchor point...
Point2D anchorPoint = calculateLabelAnchorPoint(labelAnchor, bar, plot.getOrientation());
RefineryUtilities.drawRotatedString(label, g2,
(float) anchorPoint.getX(),
(float) anchorPoint.getY(),
textAnchor, rotationAnchor, angle);
}
/**
* Draws the bar for a single (series, category) data item.
*
* @param g2 the graphics device.
* @param dataArea the data area.
* @param plot the plot.
* @param domainAxis the domain axis.
* @param rangeAxis the range axis.
* @param data the data.
* @param row the row index (zero-based).
* @param column the column index (zero-based).
*/
protected void drawVerticalItem(Graphics2D g2,
Rectangle2D dataArea,
CategoryPlot plot,
CategoryAxis domainAxis,
ValueAxis rangeAxis,
CategoryDataset dataset,
int row,
int column) {
// nothing is drawn for null values...
Number dataValue = dataset.getValue(row, column);
if (dataValue == null) {
return;
}
// BAR X
double rectX = domainAxis.getCategoryStart(column, getColumnCount(), dataArea,
plot.getDomainAxisEdge());
int seriesCount = getRowCount();
int categoryCount = getColumnCount();
if (seriesCount > 1) {
double seriesGap = dataArea.getWidth() * getItemMargin()
/ (categoryCount * (seriesCount - 1));
rectX = rectX + row * (getBarWidth() + seriesGap);
}
else {
rectX = rectX + row * getBarWidth();
}
// BAR Y
double value = dataValue.doubleValue();
double base = 0.0;
double lclip = getLowerClip();
double uclip = getUpperClip();
if (uclip <= 0.0) { // cases 1, 2, 3 and 4
if (value >= uclip) {
return; // bar is not visible
}
base = uclip;
if (value <= lclip) {
value = lclip;
}
}
else if (lclip <= 0.0) { // cases 5, 6, 7 and 8
if (value >= uclip) {
value = uclip;
}
else {
if (value <= lclip) {
value = lclip;
}
}
}
else { // cases 9, 10, 11 and 12
if (value <= lclip) {
return; // bar is not visible
}
base = getLowerClip();
if (value >= uclip) {
value = uclip;
}
}
RectangleEdge edge = plot.getRangeAxisEdge();
double transY1 = rangeAxis.translateValueToJava2D(base, dataArea, edge);
double transY2 = rangeAxis.translateValueToJava2D(value, dataArea, edge);
double rectY = Math.min(transY2, transY1);
double rectWidth = getBarWidth();
double rectHeight = Math.abs(transY2 - transY1);
Rectangle2D bar = new Rectangle2D.Double(rectX, rectY, rectWidth, rectHeight);
g2.setPaint(getItemPaint(row, column));
g2.fill(bar);
// draw the outline...
if (isDrawBarOutline() && getBarWidth() > BAR_OUTLINE_WIDTH_THRESHOLD) {
Stroke stroke = getItemOutlineStroke(row, column);
Paint paint = getItemOutlinePaint(row, column);
if (stroke != null && paint != null) {
g2.setStroke(stroke);
g2.setPaint(paint);
g2.draw(bar);
}
}
// draw the item labels if there are any...
CategoryItemLabelGenerator generator = getItemLabelGenerator(row, column);
if (generator != null && isItemLabelVisible(row, column)) {
Font labelFont = getItemLabelFont(row, column);
g2.setFont(labelFont);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -