代码之家  ›  专栏  ›  技术社区  ›  Samir Talwar PruthviRaj Reddy

如何使用Java预使用库创建条形图?

  •  1
  • Samir Talwar PruthviRaj Reddy  · 技术社区  · 16 年前

    prefuse

    我目前正在使用以下代码渲染点:

    ShapeAction shape = new ShapeAction(group, Constants.SHAPE_RECTANGLE);
    ColorAction strokeColor = new DataColorAction(group, dataType, Constants.NUMERICAL, VisualItem.STROKECOLOR, colorPalette);
    
    ActionList draw = new ActionList();
    draw.add(shape);
    draw.add(strokeColor);
    draw.add(new ColorAction(group, VisualItem.FILLCOLOR, 0));
    draw.add(new RepaintAction());
    m_vis.putAction("draw", draw);
    

    我该如何修改这段代码,以获得从图形底部到该点的一条粗条,而不是每个点上的一个小正方形?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Samir Talwar PruthviRaj Reddy    16 年前

    我想我应该指出我是如何做到这一点的——毕竟,堆栈溢出也应该是一个存储库。代码前面的内容如下:

    m_vis.setRendererFactory(new RendererFactory() {
        Renderer yAxisRenderer = new AxisRenderer(Constants.LEFT, Constants.TOP);
        Renderer xAxisRenderer = new AxisRenderer(Constants.CENTER, Constants.FAR_BOTTOM);
        Renderer barRenderer = new ShapeRenderer();
    
        public Renderer getRenderer(VisualItem item) {
            return item.isInGroup("yAxis") ? yAxisRenderer :
                   item.isInGroup("xAxis") ? xAxisRenderer :
                   barRenderer;
        }
    });
    

    m_vis.setRendererFactory(new RendererFactory() {
        Renderer yAxisRenderer = new AxisRenderer(Constants.LEFT, Constants.TOP);
        Renderer xAxisRenderer = new AxisRenderer(Constants.CENTER, Constants.FAR_BOTTOM);
        Renderer barRenderer = new ShapeRenderer() {
            protected Shape getRawShape(VisualItem item) {
                double x = item.getX();
                double y = item.getY();
                if (Double.isNaN(x) || Double.isInfinite(x))
                    x = getInsets().left + axisWidth + totalBarWidth / 2;
                if (Double.isNaN(y) || Double.isInfinite(y))
                    y = 0;
    
                double width = totalBarWidth / (barCount + 1) - barGap;
                double height = getHeight() - getInsets().bottom - axisHeight - y;
                x -= width / 2;
    
                return rectangle(x, y, width, height);
            }
        };
    
        public Renderer getRenderer(VisualItem item) {
            return item.isInGroup("yAxis") ? yAxisRenderer :
                   item.isInGroup("xAxis") ? xAxisRenderer :
                   barRenderer;
        }
    });