Получить полный путь к выбранному элементу узла дерева в JavaFX

У меня есть компонент TreeView и его содержимое, как это:

  • корень
    • item1
    • item2
    • Folder1
      • Folder2
        • item101
    • item3

Я хочу, чтобы он возвращал путь /root/Folder1/Folder2/item101 при выборе, чтобы я мог указать это в команде загрузки.

Ниже приведен пример, который я разработал до сих пор (плохо сделан для целей тестирования), проблема в том, что он не работает внутри папок, только в корне. Я использую CloudRail API для Java.

List<CloudMetaData> data = cs.getChildren("/");
String path="";
String selectedName = treeView.getSelectionModel().getSelectedItem().getValue() ;
            System.out.println(selectedName); 
for (CloudMetaData cmd : data) {
                cache.put(cmd.getPath(), cmd);
                TreeItem<String> item = new TreeItem<>(cmd.getName());
                             if(selectedName.equals(cmd.getName())){
                                 path=cmd.getPath();
                             }
}
System.out.println(path);

2 ответа

Решение

Ты можешь сделать:

StringBuilder pathBuilder = new StringBuilder();
for (TreeItem<String> item = treeView.getSelectionModel().getSelectedItem();
    item != null ; item = item.getParent()) {

    pathBuilder.insert(0, item.getValue());
    pathBuilder.insert(0, "/");
}
String path = pathBuilder.toString();

вы также можете использовать это

      private String GetTreeElementPath(TreeItem<String> item) {

    StringBuilder pathBuilder = new StringBuilder();
    for (TreeItem<String> parent = item.getParent();
         item != null ; item = item.getParent()) {

        pathBuilder.insert(0, item.getValue());
        pathBuilder.insert(0, "/");
    }
    String path = pathBuilder.toString();

    return path;

}
Другие вопросы по тегам