GWT DataGrid:同时使用CheckboxCell选择和标准线路模式选择

GWT DataGrid:同时使用CheckboxCell选择和标准线路模式选择,gwt,Gwt,我正在使用GWT DataGrid和Multiselection模型。 网格项目的选择应通过以下方式实现: a)带有CheckboxCell的CheckboxColumn 同时,通过 b)标准线路模式选择模型(单击线路的其余部分) 使用CheckboxColumn,用户可以选择多个不同的条目。但是,当单击datagrid行上的其他位置时,应执行单行选择策略,这意味着,如果在使用复选框之前执行了多次选择,则应重置此选择,并且仅应在之后选择单击的行 这就是我所拥有的。有人知道如何同时启用复选框模式和

我正在使用GWT DataGrid和Multiselection模型。

网格项目的选择应通过以下方式实现:

a)带有CheckboxCell的CheckboxColumn

同时,通过

b)标准线路模式选择模型(单击线路的其余部分)

使用CheckboxColumn,用户可以选择多个不同的条目。但是,当单击datagrid行上的其他位置时,应执行单行选择策略,这意味着,如果在使用复选框之前执行了多次选择,则应重置此选择,并且仅应在之后选择单击的行

这就是我所拥有的。有人知道如何同时启用复选框模式和行选择模式吗

public class JobDataGrid extends DataGrid<Job>
{
    private MultiSelectionModel<Job> selectionModel;

    private Column<Job, Boolean> checkboxColumn;
    private TextColumn<Job> idColumn;
    private TextColumn<Job> titleColumn;
    private TextColumn<Job> timestampColumn;
    private TexTColumn<Job> ...

    public JobDataGrid ()
    {
        super ();

        checkboxColumn = new Column<Job, Boolean> (new CheckboxCell (true, false)) {
            @Override
            public Boolean getValue (Job job)
            {
                // Get the value from the selection model.
                return selectionModel.isSelected (job);
            }
        };
        checkboxColumn.setFieldUpdater (new FieldUpdater<Job, Boolean> () {
            public void update (int index, Job job, Boolean value)
            {
                // Called when the user clicks on a checkbox.
                selectionModel.setSelected (job, value);
            }
        });

        // [...]
        // [...]
        // [...]

        selectionModel = new MultiSelectionModel<Job> ();
        setSelectionModel (selectionModel); 
        // setKeyboardSelectionPolicy (KeyboardSelectionPolicy.DISABLED);

        // [...]
        // [...]
        // [...]
    }
}
但是他们没有一个人出现在我需要的地方。我也和他一起玩过

setSelectionModel (selectionModel, DefaultSelectionEventManager.<Job> createCheckboxManager ());
setSelectionModel(selectionModel,DefaultSelectionEventManager.createCheckboxManager());
也许吧

createCustomManager(DefaultSelectionEventManager.EventTranslator<T> translator) 
createCustomManager(DefaultSelectionEventManager.EventTranslator转换器)
会有帮助吗

塔克斯 Thomas

您可以创建自己的“复选框管理器”,并在那里执行您想要的操作

table.setSelectionModel(selectModel, DefaultSelectionEventManager.<DocumentListItemDTO> createCustomManager(
            new DefaultSelectionEventManager.CheckboxEventTranslator<DocumentListItemDTO>() {
                @Override
                public SelectAction translateSelectionEvent(CellPreviewEvent<DocumentListItemDTO> event) {
                    SelectAction action = super.translateSelectionEvent(event);
                    if (action.equals(SelectAction.IGNORE)) {

                        if (!event.getNativeEvent().getCtrlKey() && !event.getNativeEvent().getShiftKey())
                            selectionModel.clear();

                        return SelectAction.TOGGLE;

                    }
                    return action;
                }
            }));
table.setSelectionModel(selectModel,DefaultSelectionEventManager.createCustomManager(
新的DefaultSelectionEventManager.CheckboxEventTranslator()默认值{
@凌驾
公共选择操作转换选择事件(CellPreviewEvent事件){
SelectAction=super.translateSelectEvent(事件);
if(action.equals(选择action.IGNORE)){
如果(!event.getNativeEvent().getCtrlKey()&&!event.getNativeEvent().getShiftKey())
selectionModel.clear();
返回SelectAction.TOGGLE;
}
返回动作;
}
}));
您可以创建自己的“复选框管理器”,并在那里执行您想要的操作

table.setSelectionModel(selectModel, DefaultSelectionEventManager.<DocumentListItemDTO> createCustomManager(
            new DefaultSelectionEventManager.CheckboxEventTranslator<DocumentListItemDTO>() {
                @Override
                public SelectAction translateSelectionEvent(CellPreviewEvent<DocumentListItemDTO> event) {
                    SelectAction action = super.translateSelectionEvent(event);
                    if (action.equals(SelectAction.IGNORE)) {

                        if (!event.getNativeEvent().getCtrlKey() && !event.getNativeEvent().getShiftKey())
                            selectionModel.clear();

                        return SelectAction.TOGGLE;

                    }
                    return action;
                }
            }));
table.setSelectionModel(selectModel,DefaultSelectionEventManager.createCustomManager(
新的DefaultSelectionEventManager.CheckboxEventTranslator()默认值{
@凌驾
公共选择操作转换选择事件(CellPreviewEvent事件){
SelectAction=super.translateSelectEvent(事件);
if(action.equals(选择action.IGNORE)){
如果(!event.getNativeEvent().getCtrlKey()&&!event.getNativeEvent().getShiftKey())
selectionModel.clear();
返回SelectAction.TOGGLE;
}
返回动作;
}
}));
显示了正确的方向

为了展示
DefaultSelectionEventManager.CheckboxEventTranslator
的用法,我们提供了一个功能齐全的解决方案:

setSelectionModel (selectionModel, DefaultSelectionEventManager.<Job> createCustomManager (
        new DefaultSelectionEventManager.CheckboxEventTranslator<Job> () {

            @Override
            public SelectAction translateSelectionEvent (CellPreviewEvent<Job> event)
            {
                NativeEvent nativeEvent = event.getNativeEvent ();

                // Determine if we clicked on a checkbox.
                Element target = nativeEvent.getEventTarget ().cast ();
                if ("input".equals (target.getTagName ().toLowerCase (Locale.ROOT)))
                {
                    final InputElement input = target.cast ();
                    if ("checkbox".equals (input.getType ().toLowerCase (Locale.ROOT)))
                    {
                        // Synchronize the checkbox with the current selection state.
                        input.setChecked (event.getDisplay ().getSelectionModel ().isSelected (
                                event.getValue ()));
                        return SelectAction.TOGGLE;
                    }
                }
                else
                {
                    if (BrowserEvents.CLICK.equals (nativeEvent.getType ()))
                    {
                        selectionModel.clear ();
                        return SelectAction.SELECT;
                    }
                }
                return SelectAction.IGNORE;
            }
        }));
setSelectionModel(selectionModel,DefaultSelectionEventManager.createCustomManager(
新的默认SelectionEventManager.CheckBoxeEventTranslator(){
@凌驾
公共选择操作转换选择事件(CellPreviewEvent事件)
{
NativeEvent NativeEvent=event.getNativeEvent();
//确定是否单击了复选框。
元素target=nativeEvent.getEventTarget().cast();
if(“input”.equals(target.getTagName().toLowerCase(Locale.ROOT)))
{
最终InputElement输入=target.cast();
if(“checkbox”.equals(input.getType().toLowerCase(Locale.ROOT)))
{
//将复选框与当前选择状态同步。
input.setChecked(event.getDisplay().getSelectionModel().isSelected(
event.getValue());
返回SelectAction.TOGGLE;
}
}
其他的
{
if(BrowserEvents.CLICK.equals(nativeEvent.getType()))
{
selectionModel.clear();
返回SelectAction.SELECT;
}
}
返回SelectAction.IGNORE;
}
}));
显示了正确的方向

为了展示
DefaultSelectionEventManager.CheckboxEventTranslator
的用法,我们提供了一个功能齐全的解决方案:

setSelectionModel (selectionModel, DefaultSelectionEventManager.<Job> createCustomManager (
        new DefaultSelectionEventManager.CheckboxEventTranslator<Job> () {

            @Override
            public SelectAction translateSelectionEvent (CellPreviewEvent<Job> event)
            {
                NativeEvent nativeEvent = event.getNativeEvent ();

                // Determine if we clicked on a checkbox.
                Element target = nativeEvent.getEventTarget ().cast ();
                if ("input".equals (target.getTagName ().toLowerCase (Locale.ROOT)))
                {
                    final InputElement input = target.cast ();
                    if ("checkbox".equals (input.getType ().toLowerCase (Locale.ROOT)))
                    {
                        // Synchronize the checkbox with the current selection state.
                        input.setChecked (event.getDisplay ().getSelectionModel ().isSelected (
                                event.getValue ()));
                        return SelectAction.TOGGLE;
                    }
                }
                else
                {
                    if (BrowserEvents.CLICK.equals (nativeEvent.getType ()))
                    {
                        selectionModel.clear ();
                        return SelectAction.SELECT;
                    }
                }
                return SelectAction.IGNORE;
            }
        }));
setSelectionModel(selectionModel,DefaultSelectionEventManager.createCustomManager(
新的默认SelectionEventManager.CheckBoxeEventTranslator(){
@凌驾
公共选择操作转换选择事件(CellPreviewEvent事件)
{
NativeEvent NativeEvent=event.getNativeEvent();
//确定是否单击了复选框。
元素target=nativeEvent.getEventTarget().cast();
if(“input”.equals(target.getTagName().toLowerCase(Locale.ROOT)))
{
最终InputElement输入=target.cast();
if(“checkbox”.equals(input.getType().toLowerCase(Locale.ROOT)))
{
//将复选框与当前选择状态同步。
input.setChecked(event.getDisplay().getSelectionModel().isSelected(
event.getValue());
返回SelectAction.TOGGLE;
}
}
其他的
{
if(BrowserEvents.CLICK.equals(nativeEvent.getType)()