/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package treetableviewselection; import javafx.application.Application; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; 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.layout.VBox; import javafx.stage.Stage; import javafx.util.Callback; public class TreeTableViewSelection 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.setPrefWidth(250); 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); HBox vb = new HBox(5); final Label lbl = new Label(); treeTableView.getFocusModel().focusedIndexProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue ov, Number t, Number t1) { lbl.setText(String.format("Focused index: %d", t1.intValue())); } }); vb.getChildren().addAll(treeTableView, new VBox(5, new Button("Some button"), lbl)); Scene scene = new Scene(vb, 400, 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); 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; } } }