⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stackedbarrenderer.java

📁 大家打开看看啊, 很有用的东西
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                                   int column) {

        // RECT X
        double positiveBase = 0.0;
        double negativeBase = 0.0;
        for (int i = 0; i < row; i++) {
            Number v = dataset.getValue(i, column);
            if (v != null) {
                double d = v.doubleValue();
                if (d > 0) {
                    positiveBase = positiveBase + d;
                }
                else {
                    negativeBase = negativeBase + d;
                }
            }
        }


        Number value = dataset.getValue(row, column);
        if (value != null) {
            double xx = value.doubleValue();
            double translatedBase;
            double translatedValue;
            double rectX;

            RectangleEdge location = plot.getRangeAxisEdge();
            if (xx > 0) {
                translatedBase = rangeAxis.translateValueToJava2D(positiveBase, dataArea, location);
                translatedValue = rangeAxis.translateValueToJava2D(positiveBase + xx, dataArea, 
                                                                   location);
                rectX = Math.min(translatedBase, translatedValue);
            }
            else {
                translatedBase = rangeAxis.translateValueToJava2D(negativeBase, dataArea, location);
                translatedValue = rangeAxis.translateValueToJava2D(negativeBase + xx, dataArea, 
                                                                   location);
                rectX = Math.min(translatedBase, translatedValue);
            }

            // Y
            double rectY = domainAxis.getCategoryStart(column, getColumnCount(), dataArea,
                                                       plot.getDomainAxisEdge());

            // RECT WIDTH
            double rectWidth = Math.abs(translatedValue - translatedBase);
            // Supplied as a parameter as it is constant

            // rect HEIGHT
            double rectHeight = getBarWidth();

            Rectangle2D bar = new Rectangle2D.Double(rectX, rectY, rectWidth, rectHeight);
            Paint seriesPaint = getItemPaint(row, column);
            g2.setPaint(seriesPaint);
            g2.fill(bar);
            if (getBarWidth() > 3) {
                g2.setStroke(getItemStroke(row, column));
                g2.setPaint(getItemOutlinePaint(row, column));
                g2.draw(bar);
            }

            // collect entity and tool tip information...
            if (getInfo() != null) {
                EntityCollection entities = getInfo().getEntityCollection();
                if (entities != null) {
                    String tip = null;
                    CategoryItemLabelGenerator generator = getItemLabelGenerator(row, column);
                    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 a stacked bar for a specific item.
     *
     * @param g2  the graphics device.
     * @param dataArea  the plot area.
     * @param plot  the plot.
     * @param domainAxis  the domain (category) axis.
     * @param rangeAxis  the range (value) axis.
     * @param data  the data.
     * @param row  the row index (zero-based).
     * @param column  the column index (zero-based).
     */
    public void drawVerticalItem(Graphics2D g2,
                                 Rectangle2D dataArea,
                                 CategoryPlot plot,
                                 CategoryAxis domainAxis,
                                 ValueAxis rangeAxis,
                                 CategoryDataset dataset,
                                 int row,
                                 int column) {

        Paint seriesPaint = getItemPaint(row, column);

        if (hasLinkingLines() && (pointsRegister == null)) {
            // need to init the points set...
            pointsRegister = new double[dataset.getColumnCount() * dataset.getRowCount() * 2];
        }

        // BAR X
        double rectX = domainAxis.getCategoryStart(column, getColumnCount(), dataArea,
                                                   plot.getDomainAxisEdge());

        // BAR Y
        double positiveBase = 0.0;
        double negativeBase = 0.0;

        for (int i = 0; i < row; i++) {
            Number v = dataset.getValue(i, column);
            if (v != null) {
                double d = v.doubleValue();
                if (d > 0) {
                    positiveBase = positiveBase + d;
                }
                else {
                    negativeBase = negativeBase + d;
                }
            }
        }

        boolean positiveValue = false;
        Number value = dataset.getValue(row, column);
        if (value != null) {
            double xx = value.doubleValue();
            double translatedBase;
            double translatedValue;
            double barY;

            RectangleEdge location = plot.getRangeAxisEdge();
            if (xx > 0) {
                translatedBase = rangeAxis.translateValueToJava2D(positiveBase, dataArea, location);
                translatedValue = rangeAxis.translateValueToJava2D(positiveBase + xx, dataArea, 
                                                                   location);
                barY = Math.min(translatedBase, translatedValue);
                positiveValue = true;
            }
            else {
                translatedBase = rangeAxis.translateValueToJava2D(negativeBase, dataArea, location);
                translatedValue = rangeAxis.translateValueToJava2D(negativeBase + xx, dataArea, 
                                                                   location);
                barY = Math.min(translatedBase, translatedValue);
            }

            double rectWidth = getBarWidth();
            double barHeight = Math.abs(translatedValue - translatedBase);

            Rectangle2D bar = new Rectangle2D.Double(rectX, barY, rectWidth, barHeight);
            g2.setPaint(seriesPaint);
            g2.fill(bar);
            if (rectWidth > 3) {
                g2.setStroke(getItemStroke(row, column));
                g2.setPaint(getItemOutlinePaint(row, column));
                g2.draw(bar);
            }

            if (hasLinkingLines()) {
                // the same series of two categories are linked together
                if (column == 0) {
                    // first category, no line drawn
                    pointsRegister[2 * row] = rectX + rectWidth;
                    if (positiveValue) {
                        pointsRegister[(2 * row) + 1] = barY;
                    }
                    else {
                        pointsRegister[(2 * row) + 1] = barY + barHeight;
                    }
                }
                else {
                    // other categories
                    int position = (column * dataset.getRowCount() * 2) + (2 * row);
                    pointsRegister[position] = rectX + rectWidth;
                    if (positiveValue) {
                        // draw a line between two stacked bars
                        double lastX = pointsRegister[position - 2 * dataset.getRowCount()];
                        if (lastX > 0.0) {
                            Line2D line = new Line2D.Double(rectX, barY, lastX,
                                pointsRegister[position - 2 * dataset.getRowCount() + 1]);
                            g2.setPaint(Color.black);
                            g2.draw(line);
                        }
                        // register the base's extremity of the drawing bar
                        pointsRegister[position + 1] = barY;
                    }
                    else {
                        double lastX = pointsRegister[position - 2 * dataset.getRowCount()];
                        if (lastX > 0.0) {
                            Line2D line = new Line2D.Double(rectX, barY + barHeight, lastX,
                                pointsRegister[position - 2 * dataset.getRowCount() + 1]);
                            g2.setPaint(Color.black);
                            g2.draw(line);
                        }
                        pointsRegister[position + 1] = barY + barHeight;
                    }
                }
            }


            // collect entity and tool tip information...
            if (getInfo() != null) {
                EntityCollection entities = getInfo().getEntityCollection();
                if (entities != null) {
                    String tip = null;
                    CategoryItemLabelGenerator generator = getItemLabelGenerator(row, column);
                    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);
                }
            }
        }

    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -