Метка вершины в графической визуализации JUNG

Я написал небольшой класс визуализатора графа:

    public void simpleGraph(SparseMultigraph<Vertex,SEdge> graph, String name) {

    Layout<Vertex, SEdge> layout = new ISOMLayout(graph);
    layout.setSize(new Dimension(800,800));
    BasicVisualizationServer<Vertex, SEdge> vv = new BasicVisualizationServer<Vertex, SEdge>(layout);
    vv.setPreferredSize(new Dimension(850,850)); //Sets the viewing area size

    JFrame frame = new JFrame(name);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(vv); 
    frame.pack();
    frame.setVisible(true);                 
}

Как я могу добавить метки для вершин и ребер? Значения хранятся в моем пользовательском классе вершин. Могу ли я выполнить итерацию по всем вершинам в Layout или BasicVisualizationServer и добавить метки?

Спасибо за вашу помощь!


person Martin Preusse    schedule 20.07.2010    source источник


Ответы (1)


Вам нужно вызвать преобразователь меток для вашей вершины/ребра:

        vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());

Это то, что вы довольно часто найдете в образцах. Он использует метод toString() вашего класса вершин для указания метки.

Немного более сложный пример:

        vv.getRenderContext().setEdgeLabelTransformer(new Transformer<MyEdge, String>() {
            public String transform(MyEdge e) {
                return (e.toString() + " " + e.getWeight() + "/" + e.getCapacity());
            }
        });

Вам не нужно перебирать края; EdgeLabelTransformer или VertexLabelTransformer будут маркировать ваши ребра по мере обновления их свойств, а VisualizationViewer будет обновлять их на лету.

person Emaad Ahmed Manzoor    schedule 03.12.2010