我实现了图算法,我必须为它创建一个接口。每一步都有一个框架。我会手动完成。 我使用Jung包但我无法弄清楚如何使该图看起来像一棵树。我挣扎了两天。
这是我的尝试:
DirectedSparseGraph<String, ?> g = new DirectedSparseGraph<String, Object>();
g.addVertex("ROOT");
g.addVertex("A");
g.addVertex("B");
g.addVertex("C");
g.addVertex("D");
g.addVertex("E");
VisualizationImageServer vv = new VisualizationImageServer(new CircleLayout(g), new Dimension(350, 300));
JFrame frame = new JFrame("First step");
frame.getContentPane().add(vv);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
我使用CircleLayout,我应该使用TreeLayout但是我必须实现Forest接口而且我不知道如何,我不是一个聪明的程序员。 :(
我希望我的图表看起来像这样:
答案 0 :(得分:0)
如果您希望图形看起来像树,则需要提供执行该操作的布局,即TreeLayout。 CircleLayout将按照顾名思义进行。
您不必实施Forest界面;已经可以实现它了。只需使用DelegateTree而不是DirectedSparseGraph。
答案 1 :(得分:0)
您需要为标签和Vertex定义Graph,Transformer并添加VisualizationViewer
public static void main(String[] args) {
Graph<Integer, String> graph3 = new DelegateForest<>();
graph3.addVertex(1);
graph3.addVertex(2);
graph3.addVertex(3);
graph3.addEdge("RAD-A", 1, 2);
graph3.addEdge("RAD-B", 1, 3);
Layout<Integer, String> layout3 = new TreeLayout<>((Forest<Integer, String>) graph3);
VisualizationViewer<Integer, String> vv3 = new VisualizationViewer<>(layout3);
Transformer<String, String> transformer3 = new Transformer<String, String>() {
@Override
public String transform(String arg0) {
return arg0;
}
};
vv3.getRenderContext().setEdgeLabelTransformer(transformer3);
Transformer<Integer, String> transformer = new Transformer<Integer, String>() {
@Override
public String transform(Integer arg0) {
return arg0.toString();
}
};
vv3.getRenderContext().setVertexLabelTransformer(transformer);
transformer3 = new Transformer<String, String>() {
@Override
public String transform(String arg0) {
return arg0;
}
};
final DefaultModalGraphMouse<String, Number> graphMouse3 = new DefaultModalGraphMouse<>();
vv3.setGraphMouse(graphMouse3);
graphMouse3.setMode(ModalGraphMouse.Mode.PICKING);
JFrame frame3 = new JFrame("Pas 3");
frame3.getContentPane().add(vv3);
frame3.pack();
frame3.setSize(350, 300);
frame3.setVisible(true);
}