所以我创建了一个 CellTree,我想要做的是选择接收右键单击的单元格,这样当我打开上下文菜单执行操作时,我就会知道我正在使用哪个单元格。也许我走错了路,我可以覆盖 onBrowserEvent 方法并检测何时有人右键单击树,但我无法确定正在单击哪个单元格,因此我可以手动选择它。有没有人找到解决这个问题的方法?
问问题
1117 次
2 回答
0
解决方案包括两个步骤:
1)将 a 添加TreeViewModel
到您的CellTree
. 使用该模型,您可以在树中设置元素的名称。这是API的一个简单实现:
private static class CustomTreeModel implements TreeViewModel {
/**
* Get the {@link NodeInfo} that provides the children of the specified
* value.
*/
public <T> NodeInfo<?> getNodeInfo(T value) {
/*
* Create some data in a data provider. Use the parent value as a prefix
* for the next level.
*/
ListDataProvider<String> dataProvider = new ListDataProvider<String>();
for (int i = 0; i < 2; i++) {
dataProvider.getList().add(value + "." + String.valueOf(i));
}
// Return a node info that pairs the data with a cell.
return new DefaultNodeInfo<String>(dataProvider, new TextCell());
}
/**
* Check if the specified value represents a leaf node. Leaf nodes cannot be
* opened.
*/
public boolean isLeaf(Object value) {
// The maximum length of a value is ten characters.
return value.toString().length() > 10;
}
}
2)当您收到右键单击Event
时,获取EventTarget
名称并将其与您使用模型设置的该项目的名称进行比较。
于 2013-09-03T23:20:34.927 回答
0
我找到了一个解决方案,我希望这对其他人有帮助,因为我一直在寻找这个。可能有更好的方法,但这是我实现所需功能的方式:
在我在树中使用的单元格中,我对 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);
}
}
于 2013-09-04T13:49:55.577 回答