Check/Uncheck CheckboxCell,点击一行 - GWT

Check/Uncheck CheckboxCell, onclick of a row - GWT

我有一个单元格 table,第一列作为复选框。当整行上有任何单击事件时,必须选中或取消选中我的复选框。这是以下用于创建 MultiSelectionModel、创建 CheckboxCell 并为单元格 table.

创建列的代码
MultiSelectionModel<Object> selectionModel = new MultiSelectionModel<>();
    table.setSelectionModel(selectionModel);

    CheckboxCell selectedCell = new CheckboxCell();
    Column<Object,Boolean> selectedCol = new Column<Object, Boolean>(selectedCell){
        @Override
        public Boolean getValue(Object object) {
            return object.isSelected();
        }
    };
    table.addColumn(selectedCol);


    //Single Click Event to Enable/Disable checkbox.
    table.addDomHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            Set<Object> selectedItems = selectionModel.getSelectedSet();

            for (Object s : selectedItems) {
                Window.alert(String.valueOf(s));
                selectionModel.setSelected(s, true);
            }
        }
    }, ClickEvent.getType());

我尝试使用 "selectionModel.setSelected(s, true)" 将一行标记为已检查。但它不起作用,当我点击行时,相应的复选框没有被选中。

我的问题是如何 enable/disable 单击整行的复选框。我的做法是否正确。或者有没有其他方法可以在 GWT 中执行此操作。

您非常接近工作解决方案。

selectedCell 中你应该 return 值取决于 selectionModel:

return selectionModel.isSelected(object);

这样您就可以使用默认的多选模型,该模型通过单击来选择行。复选框值来自选择模型。就是这样。

请参阅下面的工作示例:

CellTable<String> table = new CellTable<String>();

final MultiSelectionModel<String> selectionModel = new MultiSelectionModel<>();
table.setSelectionModel(selectionModel);

CheckboxCell selectedCell = new CheckboxCell();
Column<String, Boolean> selectedCol = new Column<String, Boolean>(selectedCell) {
    @Override
    public Boolean getValue(String object) {
        // return object.isSelected();
        return selectionModel.isSelected(object);
    }
};
table.addColumn(selectedCol);

table.addColumn(new TextColumn<String>() {
    @Override
    public String getValue(String object) {
        return object;
    }
});

List<String> values = new ArrayList<>();
for(int i = 0; i < 10; i++)
    values.add("Line " + (i + 1));
table.setRowData(values);

您可以使用标准 CtrlShift 键来控制选择。