2015-11-05 42 views
0

假設我有一個JUNG圖形可視化,那麼後面想要爲圖形添加頂點和邊線。我試圖重新繪製觀衆,但佈局新頂點不正確:添加頂點後重新佈局JUNG圖形

UndirectedGraph<Integer, String> g = new UndirectedSparseGraph<>(); 
g.addVertex(1); 
g.addVertex(2); 
g.addVertex(3); 
g.addEdge("A", 1,2); 
g.addEdge("B", 2,3); 

Layout<Integer, String> layout = new CircleLayout<>(g); 
layout.setSize(new Dimension(500, 500)); 
VisualizationViewer<Integer,String> vv = 
     new VisualizationViewer<>(layout); 
vv.setPreferredSize(new Dimension(500, 500)); 

JFrame frame = new JFrame(); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.getContentPane().add(vv); 

frame.pack(); 
frame.setVisible(true); 

try{Thread.sleep(5000);} 
catch(Exception ex){} 

g.addVertex((Integer)4); 
g.addEdge("C", 1,4); 
vv.repaint(); 

有沒有辦法加入頂點和邊後重新佈局圖?

回答

1

根據Joshua O'Madadhain你需要創建一個更新的圖形一個新的佈局,並更新可視化查看器:

public static void main(String[] args) { 
     UndirectedGraph<Integer, String> g = new UndirectedSparseGraph<>(); 
     g.addVertex(1); 
     g.addVertex(2); 
     g.addVertex(3); 
     g.addEdge("A", 1, 2); 
     g.addEdge("B", 2, 3); 

     Layout<Integer, String> layout = new CircleLayout<>(g); 
     layout.setSize(new Dimension(500, 500)); 
     VisualizationViewer<Integer, String> vv = new VisualizationViewer<>(layout); 
     vv.setPreferredSize(new Dimension(500, 500)); 

     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(vv); 

     frame.pack(); 
     frame.setVisible(true); 

     try { 
      Thread.sleep(2000); 
     } catch (Exception ex) { 
     } 

     g.addVertex((Integer) 4); 
     g.addEdge("C", 1, 4); 
     vv.setGraphLayout(new CircleLayout<>(g)); 

     // vv.repaint(); 
    } 

參考:JUNG Tree Layout dynamic update