title: JavaFX: CheckBoxTableCell get ActionEvent when user check a checkBox
body: <p>I want to trigger a method or action when the user check or uncheck a checkbox in the tableView. the coursData.addListener(...) doesn't get triggered when the user use the checkBox . </p>
  
  <p>Here is my code it compiles and the windows appears with the tableView with checkbox.</p>
  
  <pre><code>package testCheckBox2;
  
  import javafx.application.Application;
  import javafx.beans.InvalidationListener;
  import javafx.beans.Observable;
  import javafx.beans.property.BooleanProperty;
  import javafx.beans.property.SimpleBooleanProperty;
  import javafx.beans.property.SimpleStringProperty;
  import javafx.beans.property.StringProperty;
  import javafx.collections.FXCollections;
  import javafx.collections.ObservableList;
  import javafx.event.ActionEvent;
  import javafx.event.EventHandler;
  import javafx.scene.Scene;
  import javafx.scene.control.Button;
  import javafx.scene.control.ButtonBase;
  import javafx.scene.control.TableColumn;
  import javafx.scene.control.TableView;
  import javafx.scene.control.cell.CheckBoxTableCell;
  import javafx.scene.control.cell.PropertyValueFactory;
  import javafx.scene.layout.BorderPane;
  import javafx.scene.layout.HBox;
  import javafx.stage.Stage;
  
  
  public class CheckBoxTableCellTest extends Application {
  
    private TableView&lt;cours&gt; tableView;
  
    public ObservableList&lt;cours&gt; coursData ;//= FXCollections.observableArrayList();
    @Override
  
    public void start(Stage primaryStage) {
  
        this.tableView = new TableView&lt;cours&gt;();
        final TableColumn&lt;cours, String&gt; Cours = new TableColumn&lt;cours, String&gt;("Cours");
        final TableColumn&lt;cours, Boolean&gt; checkedCol = new TableColumn&lt;cours, Boolean&gt;("Checked");
  
        this.coursData  =FXCollections.observableArrayList(
                  new cours("Analyse", "3"), 
                  new cours("Analyse TP", "4"), 
                  new cours("Thermo", "5"),
                  new cours("Thermo TP", "7"),
                  new cours("Chimie", "8"));
  
      tableView.setItems(this.coursData);
  
      tableView.getColumns().addAll(Cours, checkedCol);
  
      Cours.setCellValueFactory(new PropertyValueFactory&lt;cours, String&gt;("cours"));
  
      checkedCol.setCellValueFactory(new PropertyValueFactory&lt;cours, Boolean&gt;("checked"));
  
      checkedCol.setCellFactory(CheckBoxTableCell.forTableColumn(checkedCol));
      checkedCol.setEditable(true);
      tableView.setEditable(true);
  
      final BorderPane root = new BorderPane();
      root.setCenter(tableView);
  
      coursData.addListener(new InvalidationListener() {
  
          @Override public void invalidated(Observable o) {
                  System.out.println("checkBox change state ");
                  //Here is my problem. 
                  //When the user click on a checkBox , the method isn't call .
              }
          });
  Scene scene = new Scene(root, 300, 400);
      primaryStage.setScene(scene);
      primaryStage.show();
    }
  
    public static void main(String[] args) {
      launch(args);
    }
  
    public static class cours {
      private StringProperty cours;
      private StringProperty coursID;
      private BooleanProperty checked;
  
      public cours(String cours, String coursID) {
        this.cours = new SimpleStringProperty(cours);
        this.coursID = new SimpleStringProperty(coursID);
        this.checked = new SimpleBooleanProperty(false);
      }
  
      public String getCours() {
        return cours.get();
      }
  
      public String getCoursID() {
        return coursID.get();
      }
  
      public boolean isChecked() {
        return checked.get();
      }
  
      public void setCours(String cours) {
        this.cours.set(cours);
      }
  
      public void setCoursID(String coursID) {
        this.coursID.set(coursID);
      }
  
      public void setChecked(boolean checked) {
        this.checked.set(checked);
      }
  
      public StringProperty coursProperty() {
        return cours;
      }
  
      public StringProperty coursIDProperty() {
        return coursID;
      }
  
      public BooleanProperty checkedProperty() {
        return checked;
      }
    }
  }
  </code></pre>