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オブジェクトを取得する必要があります。選択が変更されると、トランスフォーマーは形状を要求され、返された形状で頂点が更新されます。これを行う方法の例を次に示します。

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 に答える