2017-07-13 6 views
0

私はGraphStreamのJava用のライブラリで作業しています。しかし、私はここで問題に直面しています。 DBテーブルからノードを取得しようとすると、JPanelのエッジと共にデータが表示されますが、最初にプログラムが起動すると、このイメージのようにすべてのノードが1つの場所に集まりました。だから、私はすべてのノードをドラッグする必要があります。 これはなぜ発生していますか?少しのヒントもありがたいです。すべてのノードが1つの場所に集まっています - 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

で働いていました。感謝:) –

関連する問題