无法捕获javafx CheckBoxTableCell CellEditEvent

时间:2013-12-23 20:57:38

标签: javafx-2

我已将CheckBoc TableColumn定义为

@FXML    private TableColumn<Batch, Boolean> sltd;

并定义了CellValueFactory&amp; CellFactory

sltd.setCellValueFactory(new PropertyValueFactory<Batch, Boolean>("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.");
    }
});

1 个答案:

答案 0 :(得分:2)

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

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

如果您希望单个侦听器捕获对任何属性的更改,则可以使用“extractor”创建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");
      }
    }
  }
});