Javafx 2 无法捕获javafx CheckBoxTableCell CellEditEvent

Javafx 2 无法捕获javafx CheckBoxTableCell CellEditEvent,javafx-2,Javafx 2,我已将CheckBoc表列定义为 @FXML private TableColumn<Batch, Boolean> sltd; @FXML私有表列sltd; 并定义了CellValueFactory和CellFactory sltd.setCellValueFactory(new PropertyValueFactory<Batch, Boolean>("pr")); sltd.setCellFactory(CheckBoxTableCell.forTable

我已将CheckBoc表列定义为

@FXML    private TableColumn<Batch, Boolean> sltd;
@FXML私有表列sltd;
并定义了CellValueFactory和CellFactory

sltd.setCellValueFactory(new PropertyValueFactory<Batch, Boolean>("pr"));
sltd.setCellFactory(CheckBoxTableCell.forTableColumn(sltd));
sltd.setCellValueFactory(新属性值工厂(“pr”);
sltd.setCellFactory(CheckBoxTableCell.forTableColumn(sltd));
我的问题是无法捕获复选框的编辑列事件。我使用以下代码:

sltd.setOnEditStart(new EventHandler<TableColumn.CellEditEvent<Batch, Boolean>>() {
    @Override 
    public void handle(TableColumn.CellEditEvent<Batch, Boolean> t) {
        //System.out.println("CheckBox clicked.");
    }
});
sltd.setOnEditStart(新的EventHandler(){
@凌驾
公共无效句柄(TableColumn.CellEditEvent t){
//System.out.println(“选中复选框”);
}
});

我认为CheckBoxTableCell中的复选框不会调用表上的startEdit(…)方法

编辑中唯一可能发生的事情是表中某个项的布尔属性从true更改为false,反之亦然。所以你可以通过直接听这些布尔属性来检查这一点

如果您想要一个侦听器来捕获对任何属性的更改,那么可以使用“提取器”创建一个observableList,并向列表注册一个列表更改侦听器。这看起来像:

ObservableList<Batch> items = FXCollections.observableArrayList(new Callback<Batch, Observable[]>() {
  @Override
  public Observable[] call(Batch batch) {
    return new Observable[] { batch.prProperty() } ;
  }
}
// populate items
table.setItems(items);

items.addListener(new ListChangeListener<Batch>() {
  @Override
  public void onChanged(Change<? extends Batch> change) {
    while (change.hasNext()) {
      if (change.wasUpdated()) {
        System.out.println("Item at "+change.getFrom()+" changed value");
      }
    }
  }
});
ObservableList items=FXCollections.observableAryList(新回调(){
@凌驾
公共可观察[]调用(批处理){
返回新的可观察[]{batch.prProperty()};
}
}
//填充项目
表2.设置项目(项目);
items.addListener(新的ListChangeListener(){
@凌驾

public void onChanged(change)谢谢你的回答。但是我真的不理解回调部分。@James除了API之外,还有关于提取器回调的更多信息吗?关于提取器的文档很少。我的理解是,如果你定义一个提取器(从列表的元素类型回调到观察值数组),然后,当一个元素添加到列表中时,将调用回调并向每个返回的可观察项注册侦听器。如果这些可观察项发生更改,则这些更改将作为更新事件传播到列表本身。因此,在这种情况下,当批处理项添加到列表中时,将使用其prProperty注册侦听器。如果否则,它会在列表上引发更新事件。