我正在尝试使用 Google web toolkit (v2.5) TreeViewModel 创建一个单元格树,每个单元格有一个可点击的链接。我的树正确显示,但我无法弄清楚单击单元格时如何处理事件。我的类 NeoTreeModel 实现了 TreeViewModel,但是当我在 getNodeInfo 中创建一个 AbstractCell 并尝试覆盖 onBrowserEvent 时,我收到编译错误“方法没有覆盖或实现超类型中的方法”。我不致力于这种方法。我会对任何可以单击按钮或链接树并能够处理事件的解决方案感到满意。我已经尝试了几个小时来完成我认为很容易的事情。
public class NeoTreeModel implements TreeViewModel {
private List<NeoTreeItem> _items = null;
private Logger _logger = Logger.getLogger("NeoTreeModel ");
public NeoTreeModel(List<NeoTreeItem> items) {
_items = items;
}
public <T> NodeInfo<?> getNodeInfo(T value) {
List<NeoTreeItem> list = new ArrayList<NeoTreeItem>();
if (value == null) {
for (NeoTreeItem nti: _items) if (nti.getLevel() == 0) list.add(nti);
} else if (value instanceof NeoTreeItem) {
list = ((NeoTreeItem)value).getChildren();
} else {
_logger.log(Level.SEVERE, "Got request for unknown type: " + value);
}
ListDataProvider<NeoTreeItem> provider =
new ListDataProvider<NeoTreeItem>(list);
Cell<NeoTreeItem> cell = new AbstractCell<NeoTreeItem>() {
public void render(Cell.Context context, NeoTreeItem value,
SafeHtmlBuilder sb) {
if (value != null) {
sb.appendHtmlConstant("<a href='javascript:;'>");
sb.appendEscaped(value.getLongName());
sb.appendHtmlConstant("</a>");
}
}
@Override
public void onBrowserEvent(Cell.Context context, Element parent,
NeoTreeItem value, NativeEvent event,
ValueUpdater<NeoTreeItem> valueUpdater) {
_logger.log(Level.INFO, "HOWDY2");
}
}
};
return new DefaultNodeInfo<NeoTreeItem>(provider, cell);
}
public boolean isLeaf(Object value) {
boolean result = false;
if (value instanceof NeoTreeItem) {
result = ((NeoTreeItem) value).isLeaf();
}
return result;
}
}