2013-04-29 61 views
-1

我想创建具有子节点的JavaFX。我设法创建了非常简单的树:如何创建JavaFX树子节点

public class SQLBrowser extends Application { 

    ////// 
    public List<ConnectionsListObj> connListObj = new ArrayList<>(); 

    public class ConnectionsListObj { 

     private String connectionName; 
     private String dbgwName; 
     private String tableName; 

     public ConnectionsListObj(String connectionName, String dbgwName, String tableName) { 

      this.connectionName = connectionName; 
      this.dbgwName = dbgwName; 
      this.tableName = tableName; 

     } 

     public String getConnectionName() { 
      return connectionName; 
     } 

     public void setConnectionName(String connectionName) { 
      this.connectionName = connectionName; 
     } 

     public String getDbgwName() { 
      return dbgwName; 
     } 

     public void setDbgwName(String dbgwName) { 
      this.dbgwName = dbgwName; 
     } 

     public String getTableName() { 
      return tableName; 
     } 

     public void setTableName(String tableName) { 
      this.tableName = tableName; 
     } 
    } 
    ///// ------------------------- 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage stage) { 
     Scene scene = new Scene(new Group()); 
     stage.setTitle("Button Sample"); 
     stage.setWidth(300); 
     stage.setHeight(190); 
     VBox vbox = new VBox(); 
     vbox.setLayoutX(20); 
     vbox.setLayoutY(20); 

     ////////// Insert data 

     connListObj.add(new ConnectionsListObj("Connection 1", "DBGW1", "Table 1")); 
     connListObj.add(new ConnectionsListObj("Connection 1", "DBGW1", "Table 2")); 
     connListObj.add(new ConnectionsListObj("Connection 1", "DBGW2", "Table 3")); 
     connListObj.add(new ConnectionsListObj("Connection 1", "DBGW2", "Table 4")); 

     ////////// Display data 

     TreeItem<String> root = new TreeItem<>("Connection Name"); 
     root.setExpanded(true); 

     for (ConnectionsListObj connection : connListObj) { 
      // Add subnode DBGW name 
      String DBName = connection.dbgwName; 

      root.getChildren().addAll(new TreeItem<>(connection.dbgwName)); 

     } 

     TreeView<String> treeView = new TreeView<>(root); 

     ///////// 

     vbox.getChildren().add(treeView); 
     vbox.setSpacing(10); 
     ((Group) scene.getRoot()).getChildren().add(vbox); 
     stage.setScene(scene); 
     stage.show(); 
    } 
} 

但我不知道如何创建子节点到节点。我想与几个DBGW和每个DBGW有一个连接,并从ArrayList生成的表的列表。

connListObj.add(new ConnectionsListObj("Connection 1", "DBGW1", "Table 1")); 
connListObj.add(new ConnectionsListObj("Connection 1", "DBGW1", "Table 2")); 
connListObj.add(new ConnectionsListObj("Connection 1", "DBGW2", "Table 3")); 
connListObj.add(new ConnectionsListObj("Connection 1", "DBGW2", "Table 4")); 

但是,我如何创建一个循环到ArrayList并生成三个循环。

P.S.我更新的代码是这样的:

TreeItem<String> root = new TreeItem<>("Connection Name"); 
     root.setExpanded(true); 

     for (ConnectionsListObj connection : connListObj) { 
      // Add subnode DBGW name 
      String DBName = connection.dbgwName; 

      TreeItem sb; 

      root.getChildren().addAll(sb = new TreeItem<>(connection.dbgwName)); 

      //if (DBName.equals(oldDBName)) { 

      sb.getChildren().add(new TreeItem<>(connection.tableName)); 

      //} 

     } 

     TreeView<String> treeView = new TreeView<>(root); 

得到这样的结果:

enter image description here

如何基于该DBGWtables排序。

+0

当我得到这个权利,你想要一个'dbgw1'项目,然后'table1'和'table2'作为孩子,而不是两个'dbgw1'。 – Kalaschni 2013-04-29 13:12:25

+0

是的,你是对的。 – 2013-04-29 13:45:50

回答

1

TreeItem有一个其子的列表。您必须添加子节点:

parentNode.getChildren().add(yourNode); 

有关完整示例,请参阅Using JavaFX UI Controls - Tree View

+0

是的,我设法创建了子节点。但现在的问题是我如何正确地对它们进行分类? – 2013-04-29 10:31:10

+0

@PeterPenzov他们按您添加它们的顺序排序。 – Kai 2013-04-29 11:26:09

+0

你会告诉我如何写这个? – 2013-04-29 11:49:17

相关问题