我是榮格新手。我需要可視化一個包含severel節點的樹。它使用DelegateForest類型和TreeLayout類型的圖表可以正常工作。但是,當添加邊時,如果將邊添加到已存在於樹中的圖中,代碼將運行爲異常。異常是:「線程中的異常」主「java.lang.IllegalArgumentException:樹不能包含子x」。換句話說,如果添加包含頂點的邊(已經在圖中),則拋出上述異常。以下示例代碼演示此:JUNG圖:TreeLayout for SparseMultigraph
Forest<Integer, String> g2 = new DelegateForest<Integer, String>();
g2.addVertex((Integer) 1);
g2.addVertex((Integer) 2);
g2.addVertex((Integer) 3);
g2.addVertex((Integer) 4);
g2.addVertex((Integer) 5);
g2.addEdge("Edge-1-3", 1, 3);
g2.addEdge("Edge-2-3-P", 2, 3);
g2.addEdge("Edge-4-3-P", 4, 3);
g2.addEdge("Edge-4-5-P", 4, 5);
g2.addEdge("Edge-3-5-P", 3, 5);
Layout<Integer, String> layout = new TreeLayout<Integer, String>(g2);
VisualizationViewer<Integer, String> vv = new VisualizationViewer<Integer, String>(layout);
vv.setPreferredSize(new Dimension(800, 600));
vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
vv.getRenderContext().setEdgeLabelTransformer(new ToStringLabeller());
vv.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR);
JFrame frame = new JFrame("Simple Graph View");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(vv);
frame.pack();
frame.setVisible(true);
的拋出異常就行 「g2.addEdge(」 邊緣-3-5-P 「3,5);」
所以我明白我必須使用圖形類型SparseMultigraph。不幸的是,沒有看起來像TreeLayout的佈局,可以使用SparseMultigraph。你能給我一個關於如何解決我的問題的提示嗎?
非常感謝提前!
對於不是樹的圖,你不能使用TreeLayout(並且當你添加邊3-5時,圖**不再是樹)。你可以考慮一個不同的佈局,比如SpringLayout或者FRLayout ... – Marco13