1

我正在使用 JUNG 制作网络图。我想根据其类型来塑造顶点。顶点是可拾取和着色的。到目前为止,顶点的代码如下:

class VertexColors extends PickableVertexPaintTransformer<Number> {
    VertexColors(PickedInfo<Number> pi) {
        super(pi, Color.blue, Color.yellow);
    }

    public Paint transform(Number v) {
        if (pi.isPicked(v.intValue())) return picked_paint;

        return v.intValue()%2==1 ? Color.blue : Color.green;
    }
}

我对每个顶点使用以下语句:

vv.getRenderContext().setVertexFillPaintTransformer(new VertexColors(vv.getPickedVertexState()));

现在,我无法找到一种方法来塑造顶点,同时保持它们可拾取并将顶点包裹在它们的标签周围。

4

1 回答 1

3

您只需要添加另一个在选中时提供顶点形状的Transformer 。Transformer 应该根据顶点是否“选择”来选择形状。要获取拾取状态,您需要从可视化中获取PickedState对象。When the selection is changed, the transformer will be asked for the shape and the vertices will be updated with the returned shape. 以下是如何执行此操作的示例:

final VisualizationViewer<Integer, String> vv = new 
    VisualizationViewer<Integer, String>(layout);

// Transformer for cycling the vertices between three unique shapes.
Transformer<Integer, Shape> vertexShape = new 
    Transformer<Integer, Shape>() {

        private final Shape[] styles = {
                new Ellipse2D.Double(-25, -10, 50, 20),
                new Arc2D.Double(-15, -15, 30, 30, 30, 150, Arc2D.PIE) };

        @Override
        public Shape transform(Integer i) {
            // Choose a shape according to the "picked" state.
            PickedState<Integer> pickedState = vv.getPickedVertexState();
            int shapeIndex = 0;
            if (pickedState.isPicked(i)) {
                shapeIndex = 1;
            }
            return styles[shapeIndex];
        }
    };

vv.getRenderContext().setVertexShapeTransformer(vertexShape);
于 2010-02-20T06:29:58.287 回答