【问题标题】:Check/Uncheck CheckboxCell, onclick of a row - GWT选中/取消选中 CheckboxCell,单击一行 - GWT
【发布时间】:2019-12-09 19:04:00
【问题描述】:

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

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)”将一行标记为选中。但它不起作用,当我点击行时,相应的复选框没有被选中。

我的问题是如何在单击整行时启用/禁用复选框。我的方法是否正确。或者是否有任何其他方式可以在 GWT 中执行此操作。

【问题讨论】:

标签: java checkbox gwt onclick gwt-celltable


【解决方案1】:

您已经非常接近可行的解决方案了。

selectedCell 中,您应该根据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 键来控制选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多