如何在javafx中的TableColumn中的Checkbox上触发onclick事件

时间:2016-05-23 17:10:06

标签: java javafx javafx-2

我在Javafx中使用下面的复选框类型定义了TableColumn。

TableColumn<MyObject, Boolean> cbCol = new TableColumn<>(strColName);
cbCol.setCellFactory(CheckBoxCellFactory.forTableColumn(cbCol));

现在我需要在TableColumn中单击的任何复选框上触发onclick事件(执行某些操作)。有没有办法实现这个目标?

任何帮助都非常适合。

1 个答案:

答案 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);