Biswadip Dey Biswadip Dey - 1 year ago 142
Java Question

Property bindings in JavaFX TableView are not working

I followed many links and found a solution to display check box in table view. But I am unable to change the value of checkbox in table view.

Link I followed:
How to add CheckBox's to a TableView in JavaFX

Model Class:

public class TUser {
private SimpleStringProperty name;
private SimpleStringProperty address;
private SimpleBooleanProperty active;

public TUser(String name, String address, boolean active) { = new SimpleStringProperty(name);
this.address = new SimpleStringProperty(address); = new SimpleBooleanProperty(active);

public String getName() {
return name.get();

public void setName(String name) { = new SimpleStringProperty(name);

public String getAddress() {
return address.get();

public void setAddress(String address) {
this.address = new SimpleStringProperty(address);

public boolean getActive() {
return active.get();

public void setActive(boolean active) { = new SimpleBooleanProperty(active);


FXML File:

<TableView fx:id="usertable" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="500.0" xmlns="" xmlns:fx="">
<TableColumn fx:id="name" prefWidth="142.0" text="Name" />
<TableColumn fx:id="address" prefWidth="147.0" text="Address" />
<TableColumn fx:id="active" prefWidth="153.0" text="Active" />
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />

Controller Class:

public class UserManagement extends AnchorPane {

private TableView<TUser> usertable;
private TableColumn<TUser, String> address;
private TableColumn<TUser, String> name;
private TableColumn<TUser, Boolean> active;

public UserManagement() throws IOException {

private class CheckBoxCellFactory<S, T> implements Callback<TableColumn<S, T>, TableCell<S, T>> {
@Override public TableCell<S, T> call(TableColumn<S, T> p) {
return new CheckBoxTableCell<>();

private void initGraphics() throws IOException {
FXMLLoader content = new FXMLLoader(getClass().getResource("/mypack/fxmls/UserManagement.fxml"));
Node contentnode = (Node) content.load();
AnchorPane.setBottomAnchor(contentnode, 0.0);
AnchorPane.setLeftAnchor(contentnode, 0.0);
AnchorPane.setRightAnchor(contentnode, 0.0);
AnchorPane.setTopAnchor(contentnode, 0.0);

active.setCellFactory(new CheckBoxCellFactory<TUser, Boolean>());

address.setCellValueFactory(new PropertyValueFactory<TUser, String>("address"));
name.setCellValueFactory(new PropertyValueFactory<TUser, String>("name"));
active.setCellValueFactory(new PropertyValueFactory<TUser, Boolean>("active"));


private void initTable(){
ObservableList<TUser> data = FXCollections.observableArrayList(new TUser("ABC", "ABC Road", true));




Answer Source

To make the check box properly bind to the property in the model class, you need to define a property accessor method:

public class TUser {

    // other methods and fields as before....

    public BooleanProperty activeProperty() {
        return active ;


It's probably a good idea to define similar methods for your other properties too.

Note that your table is not editable, so the checkboxes cannot be manipulated by the user. If you want them to be editable, then make the TableView editable:

<TableView fx:id="usertable" editable="true" ...>

The TableColumns are editable by default.