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);
您可以使用标准 Ctrl 和 Shift 键来控制选择。
我有一个单元格 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);
您可以使用标准 Ctrl 和 Shift 键来控制选择。