我已将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.");
}
});
答案 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");
}
}
}
});