Google Web ツールキット (v2.5) TreeViewModel を使用して、セルごとに 1 つのクリック可能なリンクを持つセルのツリーを作成しようとしています。ツリーは正しく表示されていますが、セルをクリックしたときのイベントの処理方法がわかりません。私のクラス 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;
}
}