2017-07-13 34 views
0

我正在爲GraphStream開發java庫。但我在這裏面臨一個問題。 當我嘗試從數據庫表中獲取節點時,它會顯示JPanel上的數據以及邊緣,但是一開始,當程序啓動時,它將像這個圖像一樣收集所有節點。所以,我必須拖動所有的節點。 這是爲什麼發生?任何小小的提示將不勝感激。所有節點聚集在一個地方 - GraphStream - JAVA

enter image description here

這裏是我的代碼:

public class GraphExplore { 
    static Connection conn2; 
    static String result, result2; 
    static int totalRows, i; 

    public static void main(String args[]) throws SQLException { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        showData(); 
       } catch (SQLException e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    private static void showData() throws SQLException { 

     JFrame frame = new JFrame(); 
     frame.setBounds(30, 50, 1300, 600); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel(new GridLayout()){ 
      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(640, 480); 
      } 
     }; 
     panel.setBorder(BorderFactory.createLineBorder(Color.blue, 5)); 
     Graph graph = new SingleGraph("Tutorial", false, true); 

     try { 
      Class.forName("org.h2.Driver"); 
      conn2 = DriverManager.getConnection("jdbc:h2:file:G:/hs_data/h2_db/test", "sa", "sa"); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     Statement stmt2 = conn2.createStatement(); 
     ResultSet rs = stmt2.executeQuery("SELECT count(*) FROM cdr"); 
     while (rs.next()) { 
      totalRows = rs.getInt(1); 
     } 
     ResultSet rs2 = stmt2.executeQuery("SELECT ANUMBER,BNUMBER FROM CDR LIMIT 1000"); 
     while (rs2.next()) { 
      result = rs2.getString("ANUMBER"); 
      result2 = rs2.getString("BNUMBER"); 
      graph.addNode(result); 
      graph.addNode(result2); 
      for (i = 0; i < 1000; i++) 
       graph.addEdge("string" + i, result, result2); 
     } 

     Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_GUI_THREAD); 
     ViewPanel viewPanel = viewer.addDefaultView(false); 
     panel.add(viewPanel); 
     frame.add(panel); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 

     for (Node node : graph) { 
      node.addAttribute("ui.label", node.getId()); 
     } 

     } 

} 

在此之前,我用graph.display()和它工作正常,但當我加入了圖板,以我的自定義的JPanel它開始表現這樣。

回答

1

試試這個:

viewer.enableAutoLayout(); 
+0

工作。謝謝 :) –