Я застрял в части визуализации, я создал DirectedSparseMultiGraph для визуализации следующей диаграммы перехода. Я хочу нарисовать его таким же образом, как показано на изображении. В данный момент я получаю это.
Я знаю, что проблема заключается в компоновке, но я новичок в фреймворке JUNG и не могу понять его правильно.
Вот мой фрагмент кода:
Классы MyVertex и MyEdge — это простые классы с полем для их идентификатора и связанной вероятности края.
package testing.jung.in.eclipse;
import java.awt.Dimension;
import javax.swing.JFrame;
import edu.uci.ics.jung.algorithms.layout.CircleLayout;
import edu.uci.ics.jung.algorithms.layout.Layout;
import edu.uci.ics.jung.graph.DirectedSparseMultigraph;
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.graph.util.EdgeType;
import edu.uci.ics.jung.visualization.BasicVisualizationServer;
import edu.uci.ics.jung.visualization.decorators.ToStringLabeller;
import edu.uci.ics.jung.visualization.renderers.Renderer.VertexLabel.Position;
public class BasicGraphCreation
{
public static void main(String[] args)
{
Graph<MyVertex, MyEdge> g = new DirectedSparseMultigraph<MyVertex, MyEdge>();
MyVertex n0 = new MyVertex(0);
MyVertex n1 = new MyVertex(1);
MyVertex n2 = new MyVertex(2);
MyVertex n3 = new MyVertex(3);
MyVertex n4 = new MyVertex(4);
MyVertex n5 = new MyVertex(5);
MyVertex n6 = new MyVertex(6);
MyVertex o1 = new MyVertex(001);
MyVertex o2 = new MyVertex(010);
MyVertex o3 = new MyVertex(011);
MyVertex o4 = new MyVertex(100);
MyVertex o5 = new MyVertex(101);
MyVertex o6 = new MyVertex(110);
g.addEdge(new MyEdge(0.5), n0, n1, EdgeType.DIRECTED);
g.addEdge(new MyEdge(0.5), n1, n3, EdgeType.DIRECTED);
g.addEdge(new MyEdge(0.5), n3, n1, EdgeType.DIRECTED);
g.addEdge(new MyEdge(0.5), n1, n4, EdgeType.DIRECTED);
g.addEdge(new MyEdge(0.5), n3, o1);
g.addEdge(new MyEdge(0.5), n4, o2);
g.addEdge(new MyEdge(0.5), n4, o3);
g.addEdge(new MyEdge(0.5), n0, n2);
g.addEdge(new MyEdge(0.5), n2, n5);
g.addEdge(new MyEdge(0.5), n2, n6);
g.addEdge(new MyEdge(0.5), n6, n2);
g.addEdge(new MyEdge(0.5), n5, o4);
g.addEdge(new MyEdge(0.5), n5, o5);
g.addEdge(new MyEdge(0.5), n6, o6);
Layout<MyVertex, MyEdge> layout = new CircleLayout<MyVertex, MyEdge>(g);
layout.setSize(new Dimension(600, 600)); // sets the initial size of the space
// The BasicVisualizationServer<V,E> is parameterised by the edge types
BasicVisualizationServer<MyVertex, MyEdge> vv = new BasicVisualizationServer<MyVertex, MyEdge>(layout);
vv.setPreferredSize(new Dimension(650, 650)); //Sets the viewing area size
vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller<MyVertex>());
vv.getRenderContext().setEdgeLabelTransformer(new ToStringLabeller<MyEdge>());
vv.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR);
JFrame frame = new JFrame("Directed Graph ");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(vv);
frame.pack();
frame.setVisible(true);
}
}