To reproduce run following code
import javafx.application.Application;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.util.Callback;
/**
*
* @author javafx
*/
public class Test extends Application {
public static void main(String[] args) {
Application.launch(args);
}
private Parent getContent() {
Pane pane = new Pane();
ObservableList<Person> items = FXCollections.observableArrayList();
for (int i = 0; i < 10; i++) {
items.add(new Person("name " + i, "surname " + i));
}
TableColumn<Person, Node> column1 = new TableColumn<Person, Node>("First Name");
column1.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, Node>, ObservableValue<Node>>() {
@Override
public ObservableValue<Node> call(final TableColumn.CellDataFeatures<Person, Node> p) {
SimpleObjectProperty<Node> text = new SimpleObjectProperty<Node>();
text.setValue(new Label(p.getValue().getFirstName()));
return text;
}
});
TableColumn<Person, Node> column2 = new TableColumn<Person, Node>("Last Name");
column2.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, Node>, ObservableValue<Node>>() {
@Override
public ObservableValue<Node> call(final TableColumn.CellDataFeatures<Person, Node> p) {
SimpleObjectProperty<Node> text = new SimpleObjectProperty<Node>();
text.setValue(new Label(p.getValue().getLastName()));
return text;
}
});
TableView<Person> table = new TableView<Person>(items);
table.getColumns().setAll(column1, column2);
table.setPrefHeight(200);
table.setFocusTraversable(false);
pane.getChildren().add(table);
return pane;
}
public void start(Stage stage) {
stage.setX(100);
stage.setY(100);
stage.setWidth(700);
stage.setHeight(700);
Scene scene = new Scene(getContent());
stage.setScene(scene);
stage.show();
}
public static class Person {
Person(String firstName, String lastName) {
this.firstName = new SimpleStringProperty(firstName);
this.lastName = new SimpleStringProperty(lastName);
}
public StringProperty firstName;
public void setFirstName(String value) {
firstName.set(value);
}
public String getFirstName() {
return firstName.get();
}
public StringProperty firstNameProperty() {
if (firstName == null) {
firstName = new SimpleStringProperty();
}
return firstName;
}
public StringProperty lastName;
public void setLastName(String value) {
lastName.set(value);
}
public String getLastName() {
return lastName.get();
}
public StringProperty lastNameProperty() {
if (lastName == null) {
lastName = new SimpleStringProperty();
}
return lastName;
}
}
}
import javafx.application.Application;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.util.Callback;
/**
*
* @author javafx
*/
public class Test extends Application {
public static void main(String[] args) {
Application.launch(args);
}
private Parent getContent() {
Pane pane = new Pane();
ObservableList<Person> items = FXCollections.observableArrayList();
for (int i = 0; i < 10; i++) {
items.add(new Person("name " + i, "surname " + i));
}
TableColumn<Person, Node> column1 = new TableColumn<Person, Node>("First Name");
column1.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, Node>, ObservableValue<Node>>() {
@Override
public ObservableValue<Node> call(final TableColumn.CellDataFeatures<Person, Node> p) {
SimpleObjectProperty<Node> text = new SimpleObjectProperty<Node>();
text.setValue(new Label(p.getValue().getFirstName()));
return text;
}
});
TableColumn<Person, Node> column2 = new TableColumn<Person, Node>("Last Name");
column2.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, Node>, ObservableValue<Node>>() {
@Override
public ObservableValue<Node> call(final TableColumn.CellDataFeatures<Person, Node> p) {
SimpleObjectProperty<Node> text = new SimpleObjectProperty<Node>();
text.setValue(new Label(p.getValue().getLastName()));
return text;
}
});
TableView<Person> table = new TableView<Person>(items);
table.getColumns().setAll(column1, column2);
table.setPrefHeight(200);
table.setFocusTraversable(false);
pane.getChildren().add(table);
return pane;
}
public void start(Stage stage) {
stage.setX(100);
stage.setY(100);
stage.setWidth(700);
stage.setHeight(700);
Scene scene = new Scene(getContent());
stage.setScene(scene);
stage.show();
}
public static class Person {
Person(String firstName, String lastName) {
this.firstName = new SimpleStringProperty(firstName);
this.lastName = new SimpleStringProperty(lastName);
}
public StringProperty firstName;
public void setFirstName(String value) {
firstName.set(value);
}
public String getFirstName() {
return firstName.get();
}
public StringProperty firstNameProperty() {
if (firstName == null) {
firstName = new SimpleStringProperty();
}
return firstName;
}
public StringProperty lastName;
public void setLastName(String value) {
lastName.set(value);
}
public String getLastName() {
return lastName.get();
}
public StringProperty lastNameProperty() {
if (lastName == null) {
lastName = new SimpleStringProperty();
}
return lastName;
}
}
}