Можно ли TreeView заполнить коллекцией

152
11 марта 2019, 22:20

Доброго времени суток!

Иметься таблица из БД имеющая следующую структуру

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

Таблица сортируется запросом по полю NodeID и показывает вложенность

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

Можно ли сформировать коллекцию и записать высветить её в иерархическом виде или это делается как-то иначе ?

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
}

Сам реализация

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);
        }
}

Не совсем понимаю как реализовать отображение всей структуры, может использование коллекции здесь не совсем правильно? буду рад любым решениям. Благодарю за внимание!

Answer 1

Решил следующим способом

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;
}
READ ALSO
Не выполняется запрос jdbc mysql

Не выполняется запрос jdbc mysql

Вот мне нужно создать нового пользователя и логин и пароль необходимо эти данные подставить из тестовых полей в запрос но он не работает,...

144
Не запускается скомпилированный JAVA файл

Не запускается скомпилированный JAVA файл

Хочу опробовать библиотеку jssc для работы с COM портомПосле импортированния в Eclipse, тестовый код запускается

156
Java getResource() поиск ресурса при наличии JavaAgent

Java getResource() поиск ресурса при наличии JavaAgent

При наличии ресурсов в папке с JAR файлом метод getResource() берет их оттуда Необходимо, что бы метод getResource() брал ресурсы из JAR файла, а не папки,...

159
ссылки с text-underline в Outlook

ссылки с text-underline в Outlook

Хочу создать html-шаблон для подписи для Office Outlook 365Весь шаблон есть на table

141