我想创建表示人与人之间业务交互的图形,并且将GraphStream库用于Java。我写这样的代码:
EventQueue.invokeLater(new Runnable() {
public void run() {
System.setProperty("org.graphstream.ui.renderer", "org.graphstream.ui.j2dviewer.J2DGraphRenderer");
Graph graph = new SingleGraph("Tutorial 1");
String styleSheet = "node {\n"
+ "fill-color: black;\n"
+ "}\n"
+ "node.marked {\n"
+ "fill-color: red;"
+ "size: 25px;\n"
+ "}";
graph.addNode("A");
graph.addNode("B");
graph.addNode("C");
graph.addEdge("AB", "A", "B");
graph.addEdge("BC", "B", "C");
graph.addEdge("CA", "C", "A");
graph.addAttribute("ui.stylesheet", styleSheet);
graph.getNode("A").addAttribute("ui.label", "A Node");
graph.getNode("A").addAttribute("ui.class", "marked");
graph.getNode("B").addAttribute("ui.clicked", "marked");
graph.setAutoCreate(true);
Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_SWING_THREAD);
View view = viewer.addDefaultView(false);/**/ // false indicates "no JFrame".
View defaultView = viewer.getDefaultView();
JFrame frame = new JFrame("Graph");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 400);
frame.add(new JScrollPane(defaultView, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS));
frame.setVisible(true);
}
});
当我运行该程序时,将显示一个窗口,并且在同一点获得三角形的所有顶点。
然后,当我拖动三角形的顶点时,将获得3D三角形。
有人可以解释为什么拖动三角形的顶点后以3D形式得到三角形吗?如何获得2D图形?
Viewer viewer1 = graph.display();
View view1 = viewer1.addDefaultView(false);
上面的代码工作正常,但我不明白为什么在第一个示例中它不起作用
感谢您阅读这篇文章。最良好的祝愿。
最佳答案
只需使用:
Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_SWING_THREAD);
viewer.enableAutoLayout();
View view = viewer.addDefaultView(false);/**/ // false indicates "no JFrame".
View defaultView = viewer.getDefaultView();
发生这种情况是因为“ graph.display();”调用display(true)会触发自动显示,但是在创建新查看器时,默认情况下不会启用它。