package javaapplication10; import javafx.application.Application; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.value.ObservableValue; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeTableColumn; import javafx.scene.control.TreeTableView; import javafx.scene.layout.HBox; import javafx.scene.shape.Rectangle; import javafx.stage.Stage; import javafx.util.Callback; public class JavaApplication10 extends Application { public static void main(String[] args) { launch(args); } TreeTableView treeTableView; public static final int LEVEL_SIZE = 3; public static final int LEVEL_COUNT = 3; @Override public void start(Stage stage) throws Exception { treeTableView = new TreeTableView(); treeTableView.setMaxWidth(100); reset(30); treeTableView.getRoot().setExpanded(true); TreeTableColumn column = new TreeTableColumn("Items' name"); column.setCellValueFactory(new Callback, ObservableValue>() { @Override public ObservableValue call(final TreeTableColumn.CellDataFeatures p) { SimpleObjectProperty text = new SimpleObjectProperty(); text.setValue(new Label(p.getValue().getValue().getData())); return text; } }); treeTableView.getColumns().add(column); Button b = new Button("Add graphic"); b.setOnAction(new EventHandler(){ @Override public void handle(ActionEvent t) { treeTableView.getRoot().setGraphic(new Rectangle(10, 10)); } }); HBox vb = new HBox(5); vb.getChildren().addAll(treeTableView, b); Scene scene = new Scene(vb, 300, 300); stage.setScene(scene); stage.show(); } protected void reset(int length) { TreeItem item = new TreeItem(new Data("Root")); treeTableView.setRoot(item); addLevel(item, 0, length); } protected void addLevel(TreeItem item, int level, int length) { for (int i = 0; i < LEVEL_SIZE; i++) { TreeItem child = new TreeItem(new Data(createItem(level, i, length))); if (level < LEVEL_COUNT - 1) { addLevel(child, level + 1, length); } item.getChildren().add(child); } } protected static String createItem(int level, int item, int length) { StringBuilder builder = new StringBuilder(); builder.append("Level " + level + " Item " + item); if (length > 0) { builder.append(" l"); for (int j = 0; j < length; j++) { builder.append("o"); } builder.append("ng"); } return builder.toString(); } public static class Data { protected String name; protected long id; protected static long last_id = 0; public Data(String name) { this.name = name; id = last_id++; } public String getData() { return name; } @Override public String toString() { return name; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } else if (Data.class.isInstance(obj.getClass())) { return name.contentEquals(((Data) obj).name); } return super.equals(obj); } @Override public int hashCode() { int hash = 3; hash = 29 * hash + (this.name != null ? this.name.hashCode() : 0); return hash; } } }