1


0

JUNG:ピック可能頂点を形作る方法

JUNGを使用してネットワーク図を作成しています。 タイプに応じて頂点を形作りたい。 頂点は選択可能で色付けされています。 これまでの頂点のコードは次のとおりです。

class VertexColors extends PickableVertexPaintTransformer {
    VertexColors(PickedInfo 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()));

今では、頂点を選択可能に保ちながら頂点を形作り、ラベルを頂点で囲む方法を見つけることができません。 助けてください…​

1 Answer


3


必要なのは、別のhttp://www.jarvana.com/jarvana/view/net/sourceforge/collections/collections-generic/4.01/collections-generic-4.01-javadoc.jar!/index.html?org/を追加することですapache / commons / collections15 / Transformer.html [Transformer]は、選択されたときに頂点の形状を提供します。 Transformerは、頂点が「選択」されているかどうかに基づいて形状を選択する必要があります。 選択した状態を取得するには、視覚化からhttp://jung.sourceforge.net/doc/api/edu/uci/ics/jung/visualization/picking/PickedState.html[PickedState]オブジェクトを取得する必要があります。 選択が変更されると、トランスフォーマーに形状が求められ、返された形状で頂点が更新されます。 これを行う方法の例は次のとおりです。

final VisualizationViewer vv = new
    VisualizationViewer(layout);

// Transformer for cycling the vertices between three unique shapes.
Transformer vertexShape = new
    Transformer() {

        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 pickedState = vv.getPickedVertexState();
            int shapeIndex = 0;
            if (pickedState.isPicked(i)) {
                shapeIndex = 1;
            }
            return styles[shapeIndex];
        }
    };

vv.getRenderContext().setVertexShapeTransformer(vertexShape);