Search code examples
javajavafxtreeview

How to fetch the folder or files names from an absolute path in a tree View using JavaFX?


itemlist.java:::

public class itemlist {

public TreeItem<File> createNode(final File f) {
return new TreeItem<File>(f) {
private boolean isLeaf;
private boolean isFirstTimeChildren = true;
private boolean isFirstTimeLeaf = true;`

@Override
public ObservableList<TreeItem<File>> getChildren() {
  if (isFirstTimeChildren) {
    isFirstTimeChildren = false;
    super.getChildren().setAll(buildChildren(this));
  }
  return super.getChildren();
}

@Override
public boolean isLeaf() {
  if (isFirstTimeLeaf) {
    isFirstTimeLeaf = false;
    File f = (File) getValue();
    isLeaf = f.isFile();
  }
  return isLeaf;
}

private ObservableList<TreeItem<File>> buildChildren(
    TreeItem<File> TreeItem) {
  File f = TreeItem.getValue();
  if (f == null) {
    return FXCollections.emptyObservableList();
  }
  if (f.isFile()) {
    return FXCollections.emptyObservableList();
  }
  File[] files = f.listFiles();
 // String allfiles= files.toString();
  //allfiles.

  if (files != null) {
    ObservableList<TreeItem<File>> children = FXCollections
        .observableArrayList();
    for (File childFile : files) {
      children.add(createNode(childFile));
    }
    return children;
  }
  return FXCollections.emptyObservableList();
}

controller.java::::

public void initialize(URL location, ResourceBundle resources) {
    // TODO Auto-generated method stub
    
    itemlist obj=new itemlist();
    TreeItem<File> rt =obj.createNode(new File("c:\\"));
    fileView.setRoot(rt);`

So this gives me an output like C:\\programfiles ->C:\\programfiles\java ->C:\\programfiles\python All I want is to remove these absolute path & just game the file/folder name. I understand using getName would help that but how do I implement getName() in my code?


Solution

  • You can change generic type from File to String and use only the file name:

        class ItemList {
        
            public TreeItem<String> createNode(final File f) {
                return new TreeItem<String>(f.getName()) {
                    private boolean isLeaf;
                    private boolean isFirstTimeChildren = true;
                    private boolean isFirstTimeLeaf = true;
        
                    @Override
                    public ObservableList<TreeItem<String>> getChildren() {
                        if (isFirstTimeChildren) {
                            isFirstTimeChildren = false;
                            super.getChildren().setAll(buildChildren(f));
                        }
                        return super.getChildren();
                    }
        
                    @Override
                    public boolean isLeaf() {
                        if (isFirstTimeLeaf) {
                            isFirstTimeLeaf = false;
                            isLeaf = f.isFile();
                        }
                        return isLeaf;
                    }
        
                    private ObservableList<TreeItem<String>> buildChildren(
                            File f) {
        
                        if (f == null) {
                            return FXCollections.emptyObservableList();
                        }
                        if (f.isFile()) {
                            return FXCollections.emptyObservableList();
                        }
                        File[] files = f.listFiles();
                        
                        if (files != null) {
                            ObservableList<TreeItem<String>> children = FXCollections
                                    .observableArrayList();
                            for (File childFile : files) {
                                children.add(createNode(childFile));
                            }
                            return children;
                        }
                        return FXCollections.emptyObservableList();
                    }
                };
            }
        }
    
        ItemList obj = new ItemList();
        TreeItem<String> rt = obj.createNode(new File("/"));
        TreeView<String> treeView = new TreeView<>(rt);