我在Javafx中使用下面的复选框类型定义了TableColumn。
TableColumn<MyObject, Boolean> cbCol = new TableColumn<>(strColName);
cbCol.setCellFactory(CheckBoxCellFactory.forTableColumn(cbCol));
现在我需要在TableColumn中单击的任何复选框上触发onclick事件(执行某些操作)。有没有办法实现这个目标?
任何帮助都非常适合。
答案 0 :(得分:0)
我正在使用以下的customer cell工厂在checkboxes
中获取tableCell
。你也可以使用它,并在这里有onClick
监听器。以下是代码:
final class BooleanCell extends TableCell<MyObject, Boolean> {
private CheckBox checkBox;
public BooleanCell() {
checkBox = new CheckBox();
checkBox.setOnAction((evt) -> {
getTableView().getItems().get(getIndex()).setCheck(new SimpleBooleanProperty(checkBox.isSelected()));
}
});
this.setGraphic(checkBox);
this.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
this.setEditable(true);
}
@Override
public void startEdit() {
super.startEdit();
if (isEmpty()) {
return;
}
checkBox.requestFocus();
}
@Override
public void cancelEdit() {
super.cancelEdit();
// checkBox.setDisable(true);
}
@Override
public void commitEdit(Boolean value) {
super.commitEdit(value);
// checkBox.setDisable(true);
}
@Override
public void updateItem(Boolean item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setGraphic(null);
} else {
if (item != null) {
checkBox.setAlignment(Pos.CENTER);
checkBox.setSelected(item);
}
setAlignment(Pos.CENTER);
setGraphic(checkBox);
}
}
}
上述cell factory
可以应用于tableColumn
,如下所述。
Callback<TableColumn<MyObject, Boolean>, TableCell<MyObject, Boolean>> booleanCellFactory = new Callback<TableColumn<MyObject, Boolean>, TableCell<MyObject, Boolean>>() {
@Override
public TableCell<MyObject, Boolean> call(TableColumn<MyObject, Boolean> p) {
return new BooleanCell();
}
};
tbColCheck.setCellFactory(booleanCellFactory);