package treetable; import com.sun.javafx.runtime.VersionInfo; import javafx.application.Application; import javafx.beans.property.SimpleStringProperty; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.control.TreeTableColumn.CellDataFeatures; import javafx.scene.control.cell.TextFieldTreeTableCell; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.stage.Stage; import javafx.util.Callback; public class TreeTableViewTest extends Application { private ObservableList idPool = FXCollections.observableArrayList(); private TreeTableView ttv; private TreeTableColumn name; @Override public void start(Stage primaryStage) { HBox root = new HBox(10.0); Scene scene = new Scene(root, 400, 250); initTreeTableView(); Button showSelection = new Button("Show selection"); showSelection.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { ObservableList selectedItems = ttv.getSelectionModel().getSelectedItems(); for (Object object : selectedItems) { TreeItem it = (TreeItem) object; System.out.print(((Data) it.getValue()).name); System.out.print(" "); } System.out.println(""); } }); Button applyStyle = new Button("Apply style"); applyStyle.setOnAction(new EventHandler() { @Override public void handle(ActionEvent actionEvent) { name.setStyle("-fx-background-color: red;"); } }); root.getChildren().addAll(ttv, new VBox(showSelection, applyStyle)); primaryStage.setTitle(VersionInfo.getRuntimeVersion()); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } private void initTreeTableView() { ttv = new TreeTableView(); ttv.getFocusModel().focusedIndexProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue observable, Number oldValue, Number newValue) { System.out.println("Focused index = " + ttv.getFocusModel().getFocusedIndex()); } }); ttv.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); ttv.getSelectionModel().setCellSelectionEnabled(true); ttv.setRoot(new TreeItem(new Data("Root", "42"))); ttv.getRoot().setExpanded(true); for (int i = 0; i < 4; i++) { String id = "id - " + i; idPool.add(id); TreeItem parent = new TreeItem(new Data("item - " + i, id)); ttv.getRoot().getChildren().add(parent); for (int j = 0; j < 4; j++) { id = "id - " + i + " " + j; idPool.add(id); TreeItem child = new TreeItem(new Data("item - " + i + " " + j, id)); parent.getChildren().add(child); } } name = new TreeTableColumn("Name"); name.setCellValueFactory(new Callback, ObservableValue>() { @Override public ObservableValue call(CellDataFeatures p) { return p.getValue().getValue().name; } }); ttv.getColumns().addAll(name); name.setCellFactory(TextFieldTreeTableCell.forTreeTableColumn()); } private class Data { public SimpleStringProperty name; public SimpleStringProperty id; public Data(String _name, String _id) { name = new SimpleStringProperty(_name); id = new SimpleStringProperty(_id); } } }