Rótulo de vértice na visualização do gráfico JUNG
-
17-09-2020 - |
Pergunta
Eu escrevi uma pequena classe de visualizador de gráfico:
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);
}
Como posso adicionar rótulos para vértices e arestas?Os valores são armazenados em minha classe de vértice personalizada.Posso iterar todos os vértices no Layout ou BasicVisualizationServer e adicionar rótulos?
Obrigado pela ajuda!
Solução
Você precisa chamar um transformador de rótulo para seu vértice/aresta:
vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
Isso é algo que você encontrará com bastante frequência nas amostras.Ele usa o método toString() da sua classe de vértice para especificar o rótulo.
Um exemplo um pouco mais envolvente:
vv.getRenderContext().setEdgeLabelTransformer(new Transformer<MyEdge, String>() {
public String transform(MyEdge e) {
return (e.toString() + " " + e.getWeight() + "/" + e.getCapacity());
}
});
Você não precisa iterar nas bordas;o EdgeLabelTransformer ou VertexLabelTransformer rotulará suas arestas conforme e quando suas propriedades forem atualizadas, e o VisualizationViewer as atualizará instantaneamente.