2015-11-05 44 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