这是一个相当简单但全面的例子。分析之后,您应该能够实施您的解决方案。
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.TreeCell; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeView; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class TreeViewCellApp extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) throws Exception { TreeItem<Employee> leaf1Item = new TreeItem<Employee>(new Employee("Anne Burnes", "Employee")); TreeItem<Employee> leaf2Item = new TreeItem<Employee>(new Employee("Ronan Jackson", "Employee")); TreeItem<Employee> rootItem = new TreeItem<Employee>(new Employee("Jack Shields", "Head")); rootItem.getChildren().add(leaf1Item); rootItem.getChildren().add(leaf2Item); Label label = new Label(); TreeView<Employee> treeView = new TreeView<>(rootItem); treeView.setCellFactory(param -> new TreeCell<Employee>() { @Override protected void updateItem(Employee employee, boolean empty) { super.updateItem(employee, empty); if (employee == null || empty) { setGraphic(null); } else { EmployeeControl employeeControl = new EmployeeControl(employee); employeeControl.setOnMouseClicked(mouseEvent -> label.setText(employee.getName())); setGraphic(employeeControl); } } }); VBox vBox = new VBox(label, treeView); stage.setScene(new Scene(vBox)); stage.show(); } } class Employee { private final String name; private final String capacity; public Employee(String name, String capacity) { this.name = name; this.capacity = capacity; } public String getName() { return name; } public String getCapacity() { return capacity; } } class EmployeeControl extends HBox { private final Label nameLabel = new Label(); private final Label capacityLabel = new Label(); { getChildren().addAll(nameLabel, capacityLabel); } public EmployeeControl(Employee employee) { nameLabel.setText(employee.getName()); capacityLabel.setText(employee.getCapacity()); } }