Как сформировать выбираемые вершины? - PullRequest
1 голос
/ 01 февраля 2010

Я использую 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()));

Теперь я не могу найти способ придать вершинам форму, оставляя их выбираемыми, и обернуть вершины вокруг меток.

1 Ответ

3 голосов
/ 20 февраля 2010

Все, что вам нужно, это добавить еще один 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);
...