2010-02-01 13 views
1

Я использую JUNG для создания сетевой диаграммы. Я хочу сформировать вершины в зависимости от их типа. Вершины подбираются и окрашиваются. Код вершин до сих пор, как в: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())); 

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

ответ

3

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

 Смежные вопросы

  • Нет связанных вопросов^_^