Perfect! Let’s study TreeView in JavaFX. I’ll give both Java code and FXML version for you.
1️⃣ What is TreeView?
TreeViewis a hierarchical control to display nested items.- Each item is a
TreeItem. - Commonly used for file explorers, folder structures, or categories.
- Unlike
TreeTableView, it doesn’t have columns, only a single tree of nodes.
2️⃣ Key Features
- Root and children: Use
TreeItemto create hierarchy. - Selectable: Use
getSelectionModel()to get selected items. - Expandable/collapsible nodes: Nodes can be expanded or collapsed.
- Editable: Can edit the text of nodes (optional).
3️⃣ Java Example
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class TreeViewExample extends Application {
@Override
public void start(Stage primaryStage) {
// Root node
TreeItem<String> root = new TreeItem<>("Root Folder");
root.setExpanded(true);
// Child nodes
TreeItem<String> child1 = new TreeItem<>("File1.txt");
TreeItem<String> child2 = new TreeItem<>("SubFolder");
TreeItem<String> child2File = new TreeItem<>("File2.txt");
child2.getChildren().add(child2File);
root.getChildren().addAll(child1, child2);
// TreeView
TreeView<String> treeView = new TreeView<>(root);
VBox rootBox = new VBox(treeView);
rootBox.setStyle("-fx-padding: 20;");
Scene scene = new Scene(rootBox, 300, 250);
primaryStage.setScene(scene);
primaryStage.setTitle("TreeView Example");
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
✅ Explanation:
TreeItem<String>– each node holds a String.root.setExpanded(true)– root node is expanded by default.- Children are added with
getChildren().add(...).
4️⃣ FXML Version
tree_view.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.TreeView?>
<?import javafx.scene.layout.VBox?>
<VBox xmlns="http://javafx.com/javafx/17.0.2"
xmlns:fx="http://javafx.com/fxml"
fx:controller="com.example.TreeViewController"
spacing="10" style="-fx-padding: 20;">
<TreeView fx:id="treeView"/>
</VBox>
TreeViewController.java
package com.example;
import javafx.fxml.FXML;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
public class TreeViewController {
@FXML
private TreeView<String> treeView;
@FXML
public void initialize() {
// Root node
TreeItem<String> root = new TreeItem<>("Root Folder");
root.setExpanded(true);
// Child nodes
TreeItem<String> child1 = new TreeItem<>("File1.txt");
TreeItem<String> child2 = new TreeItem<>("SubFolder");
TreeItem<String> child2File = new TreeItem<>("File2.txt");
child2.getChildren().add(child2File);
root.getChildren().addAll(child1, child2);
treeView.setRoot(root);
}
}
5️⃣ Notes
- Selection:
treeView.getSelectionModel().selectedItemProperty().addListener((obs, oldVal, newVal) -> {
System.out.println("Selected: " + newVal.getValue());
});
- Editable nodes:
treeView.setEditable(true);
- Icons: You can add
setGraphic(Node)for icons next to text.