import javafx.application.Application; import javafx.beans.property.StringProperty; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.TableCell; import javafx.scene.control.TableColumn; import javafx.scene.control.TableColumn.CellDataFeatures; import javafx.scene.control.TableView; import javafx.scene.layout.VBox; import javafx.stage.Stage; import javafx.util.Callback; /** * * @author Alexander Kouznetsov */ public class TableViewTest extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) throws Exception { final TableView tableView = new TableView(); ObservableList teamMembers = FXCollections.observableArrayList( new Person("John", "Smith"), new Person("A", "1"), new Person("B", "2"), new Person("C", "3"), new Person("D", "4"), new Person("E", "5"), new Person("F", "6"), new Person("G", "7"), new Person("H", "8"), new Person("I", "9"), new Person("J", "10"), new Person("K", "11"), new Person("L", "12"), new Person("M", "13"), new Person("N", "14"), new Person("O", "15"), new Person("P", "16"), new Person("Q", "17"), new Person("R", "18"), new Person("S", "19"), new Person("T", "20"), new Person("U", "21"), new Person("Victor", "Johnson") ); tableView.setItems(teamMembers); TableColumn firstNameCol = new TableColumn("First Name"); TableColumn lastNameCol = new TableColumn("Last Name"); lastNameCol.setDataRetriever(new Callback, String>() { public String call(CellDataFeatures p) { return ((Person) p.getValue()).getLastName(); } }); firstNameCol.setDataRetriever(new Callback, String>() { public String call(CellDataFeatures p) { return ((Person) p.getValue()).getFirstName(); } }); lastNameCol.setCellFactory(new Callback() { public Object call(Object p) { return new TableCell() { { System.out.println("selected = " + isSelected()); selectedProperty().addListener(new ChangeListener() { public void changed(ObservableValue ov, Boolean t, Boolean t1) { System.out.println(this + " is selected = " + t); } }); } @Override public void updateItem(String t, boolean bln) { setNode(new Label(t)); } }; } }); tableView.getColumns().setAll(firstNameCol, lastNameCol); // tableView.getSelectionModel().setCellSelectionEnabled(true); // tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE_INTERVAL_SELECTION); VBox vBox = new VBox(); vBox.getChildren().setAll(tableView); Scene scene = new Scene(vBox); stage.setScene(scene); stage.setVisible(true); } public static final class Person { private StringProperty firstName = new StringProperty(); private StringProperty lastName = new StringProperty(); public void setFirstName(String value) { firstName.set(value); } public String getFirstName() { return firstName.get(); } public StringProperty firstNameProperty() { return firstName; } public void setLastName(String value) { lastName.set(value); } public String getLastName() { return lastName.get(); } public StringProperty lastNameProperty() { return lastName; } public Person(String firstName, String lastName) { setFirstName(firstName); setLastName(lastName); } } }