gpt4 book ai didi

java - GWT DataGrid 复选框

转载 作者:太空宇宙 更新时间:2023-11-04 06:24:44 25 4
gpt4 key购买 nike

使用 GWT 2.6.1、UiBinder、DataGrid。
还使用 SingleSelectionModel 选择单行:

final SingleSelectionModel<User> selectionModel = new SingleSelectionModel<>(keyProvider);

复选框列:

// checkboxes
Column<User, Boolean> checkBoxColumn = new Column<User, Boolean>(
new CheckboxCell(false, false)) {
@Override
public Boolean getValue(User user) {
return user.isChecked();
}
};

checkBoxColumn.setFieldUpdater(new FieldUpdater<User, Boolean>() {
@Override
public void update(int index, User user, Boolean value) {
user.setChecked(value);
}
});

所以我将“已检查”用户状态存储为用户实体类中的 boolean 字段,而不需要完全使用 SelectionModel。

现在我需要实现自定义标题复选框来选择/取消选择列中的所有复选框。

public class CheckboxHeader extends Header<Boolean> {

public CheckboxHeader(CheckboxCell cell) {
super(cell);
}

@Override
public Boolean getValue() {
return null;
}
}

不知道如何正确实现此 header 类以在 DataGrid 中添加列:

dataGrid.addColumn(checkBoxColumn, new CheckboxHeader(new CheckboxCell(false, false)));

另一个麻烦是通过选中其他复选框来启用/禁用所有这些复选框不在 DataGrid 中。
我如何从列/选择模型/等中检索所有复选框并一一启用/禁用它们?感谢任何建议。

最佳答案

混合数据模型(用户实体)和用户界面的状态(isSelected)从来都不是一个好主意。

您可以这样做(将 T 替换为您的对象,或创建一个可以重复使用的列对象):

Column<T, Boolean> checkColumn = new Column<T, Boolean>(new CheckboxCell()) {
@Override
public Boolean getValue(T object) {
return getSelectionModel().isSelected(object);
}
};
checkColumn.setFieldUpdater(new FieldUpdater<T, Boolean>() {
@Override
public void update(int index, T object, Boolean value) {
getSelectionModel().setSelected(object, value);
dataProvider.refresh();
}
});

myDataGrid.setSelectionModel(getSelectionModel(), DefaultSelectionEventManager.<T> createCheckboxManager(0));

Header<Boolean> selectAllHeader = new Header<Boolean>(new HeaderCheckbox()) {

@Override
public Boolean getValue() {
for (T item : getVisibleItems()) {
if (!getSelectionModel().isSelected(item)) {
return false;
}
}
return getVisibleItems().size() > 0;
}
};
selectAllHeader.setUpdater(new ValueUpdater<Boolean>() {

@Override
public void update(Boolean value) {
for (T object : getVisibleItems()) {
getSelectionModel().setSelected(object, value);
}
}
});
myDataGrid.addColumn(checkColumn, selectAllHeader);

关于java - GWT DataGrid 复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26951401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com