GWT单元树右键单击选择

GWT单元树右键单击选择,gwt,tree,cell,Gwt,Tree,Cell,因此,我创建了一个CellTree,我想做的是选择一个右键单击的单元格,这样当我打开上下文菜单进行操作时,我就会知道我正在使用哪个单元格。也许我做得不对,我可以重写onBrowserEvent方法并检测某人右键单击树的时间,但我无法确定单击的是哪个单元格,因此我可以手动选择它。是否有人找到了此问题的解决方案?解决方案包括两个步骤: 一, 将TreeViewModel添加到CellTree的构造函数中。使用该模型,您可以在树中设置元素的名称。以下是一个来自以下方面的简单实现: 2当您收到右键单击事

因此,我创建了一个CellTree,我想做的是选择一个右键单击的单元格,这样当我打开上下文菜单进行操作时,我就会知道我正在使用哪个单元格。也许我做得不对,我可以重写onBrowserEvent方法并检测某人右键单击树的时间,但我无法确定单击的是哪个单元格,因此我可以手动选择它。是否有人找到了此问题的解决方案?

解决方案包括两个步骤:

一, 将TreeViewModel添加到CellTree的构造函数中。使用该模型,您可以在树中设置元素的名称。以下是一个来自以下方面的简单实现:


2当您收到右键单击事件时,获取事件目标名称,并将其与您使用模型设置的项目名称进行比较。

我找到了一个解决方案,希望这对其他人有所帮助,因为我已经搜索了很长时间。也许有更好的方法,但以下是我实现所需功能的方式:

在树中使用的单元格中,我对onbrowserevent进行了覆盖,以捕获鼠标事件并设置选择模型。使用抽象单元,你可以接收你想要它收听的事件,在我的例子中,我选择了鼠标按下

public class CustomContactCell extends AbstractCell<ContactInfo> {

    private SetSelectionModel<ContactInfo> selectionModel;

    public CustomContactCell(SetSelectionModel<ContactInfo> selectionModel) {
        super("mousedown");
        this.selectionModel = selectionModel;
    }

    @Override
    public void render(Context context, ContactInfo value, SafeHtmlBuilder sb) {
        ...
    }

    @Override
    public void onBrowserEvent(com.google.gwt.cell.client.Cell.Context context, Element parent, ContactInfo value, NativeEvent event, ValueUpdater<ContactInfo> valueUpdater) {
        if (event.getButton() == NativeEvent.BUTTON_RIGHT) {
            if (selectionModel != null) {
                selectionModel.clear();
                selectionModel.setSelected(value, true);
            }
        }
        super.onBrowserEvent(context, parent, value, event, valueUpdater);
    }
}

我有一个TreeView模型。所以我可以执行event.getEventTarget,但没有get name方法或类似的方法。即使我可以从eventtarget中获取名称,我也不确定如何遍历模型或搜索其中的项,我看不到允许这样做的api
public class CustomContactCell extends AbstractCell<ContactInfo> {

    private SetSelectionModel<ContactInfo> selectionModel;

    public CustomContactCell(SetSelectionModel<ContactInfo> selectionModel) {
        super("mousedown");
        this.selectionModel = selectionModel;
    }

    @Override
    public void render(Context context, ContactInfo value, SafeHtmlBuilder sb) {
        ...
    }

    @Override
    public void onBrowserEvent(com.google.gwt.cell.client.Cell.Context context, Element parent, ContactInfo value, NativeEvent event, ValueUpdater<ContactInfo> valueUpdater) {
        if (event.getButton() == NativeEvent.BUTTON_RIGHT) {
            if (selectionModel != null) {
                selectionModel.clear();
                selectionModel.setSelected(value, true);
            }
        }
        super.onBrowserEvent(context, parent, value, event, valueUpdater);
    }
}