Good day!

Have a table from the database which has the following structure

Tablebase ID - Integer NodeID - VarChar NodeName - VarChar nodeType - VarChar 

The table is sorted by the request on the NodeID field and shows

 "SELECT * FROM `Tablebase` ORDER BY `NodeID`;" 1. 1.1. 1.1.1. 2.1. 2.1.1. 3. 3.1. 4. 5. 

Is it possible to form a collection and write to highlight it in a hierarchical form, or is it done somehow differently?

 public class NodeTreeView { private IntegerProperty id; private StringProperty nodeId; private StringProperty nodeName; private StringProperty nodeType; public NodeTreeView(IntegerProperty id, StringProperty nodeId, StringProperty nodeName, StringProperty nodeType) { this.id = id; this.nodeId = nodeId; this.nodeName = nodeName; this.nodeType = nodeType; } // далее getter + setter + toString } 

Implementation itself

 public class Controller { @FXML private TreeView<NodeTreeView> tvExplorer; private ObservableList<NodeTreeView> baseNodeTreeView = FXCollections.observableArrayList(); private String sql; public void initialize() throws SQLException { Main.sqlOperation.connectToBD(); sql = "SELECT * FROM `erelectroniclibrary` ORDER BY `NodeID`;"; Main.sqlOperation.setQuery(sql); Main.sqlOperation.executeSql(); if (baseNodeTreeView.size() >0 ) { baseNodeTreeView.clear(); } while (Main.sqlOperation.getRs().next()) { baseNodeTreeView.add(new NodeTreeView( new SimpleIntegerProperty(Main.sqlOperation.getRs().getInt("ID")), new SimpleStringProperty(Main.sqlOperation.getRs().getString("NodeID")), new SimpleStringProperty(Main.sqlOperation.getRs().getString("NodeName")), new SimpleStringProperty(Main.sqlOperation.getRs().getString("NodeType")) )); } TreeItem<NodeTreeView> rootItem = new TreeItem<NodeTreeView>(); rootItem.setValue(baseNodeTreeView.get(0)); tvExplorer.setRoot(rootItem); } } 

I do not quite understand how to implement the display of the entire structure. Can the use of the collection here is not entirely correct? I will be glad to any decisions. Thank you for attention!

    1 answer 1

    Decided in the following way

     TreeItem<NodeTreeView> child; TreeItem<NodeTreeView> parent; rootItem = new TreeItem<NodeTreeView>(); child = new TreeItem<NodeTreeView>(); tvExplorer.setRoot(rootItem); for (Integer i = 0; i < baseNodeTreeView.size(); i++) { if (getPoint(baseNodeTreeView.get(i).getNodeId()) == 1) { parent = rootItem; child = new TreeItem<NodeTreeView>(baseNodeTreeView.get(i)); parent.getChildren().add(child); } else { parent = child; child = new TreeItem<NodeTreeView>(baseNodeTreeView.get(i)); parent.getChildren().add(child); } } private Integer getPoint(String nodeId) { Integer point = 0; String dot = Pattern.quote("."); point = nodeId.split(dot).length; return point; }