gpt4 book ai didi

java - 如何通过单击文本而不是图标来打开 GWT CellTree 节点

转载 作者:行者123 更新时间:2023-11-29 05:02:35 25 4
gpt4 key购买 nike

我正在使用 GWT CellTree 复杂示例,如 javadoc 中所述.但是要打开树节点,我必须单击节点左侧的小箭头。我想通过单击文本打开树。我搜索了一些帮助,发现我可以使用 ClickableTextCell。说真的,我不知道从哪里开始。你能帮助我或提供其他解决方案吗?我希望该节点看起来像一个 anchor :当我将鼠标悬停在文本上时,光标变为指针并且文本为下划线。

public <T> NodeInfo<?> getNodeInfo(T value) {
if (value == null) {
ListDataProvider<Composer> dataProvider = new ListDataProvider<CellTreeExample2.Composer>(
composers);
Cell<Composer> cell = new AbstractCell<Composer>() {
@Override
public void render(Context context, Composer value, SafeHtmlBuilder sb) {
if (value != null) {
sb.appendEscaped(value.getName());
}
}
};
return new DefaultNodeInfo<Composer>(dataProvider, cell);
} else if (value instanceof Composer) {
ListDataProvider<Playlist> dataProvider = new ListDataProvider<Playlist>(
((Composer) value).getPlaylists());
Cell<Playlist> cell = new AbstractCell<Playlist>() {
@Override
public void render(Context context, Playlist value, SafeHtmlBuilder sb) {
if (value != null) {
sb.appendEscaped(value.getName());
}
}
};
return new DefaultNodeInfo<Playlist>(dataProvider, cell);
} else if (value instanceof Playlist) {
ListDataProvider<String> dataProvider = new ListDataProvider<String>(
((Playlist) value).getSongs());
return new DefaultNodeInfo<String>(dataProvider, new TextCell(),
selectionModel, null);
}

return null;
}
public boolean isLeaf(Object value) {
if (value instanceof String) {
return true;
}
return false;
}

最佳答案

因为您可能不希望这些节点也可选择,所以我会使用 NoSelectionModel

每当您单击这些节点时,调用父 TreeNode 上的 setChildOpen() 以切换其状态。要获取父级 TreeNode,请在祖父级 TreeNode 上使用 setChildOpen(index, true)(递归到 getRootTreeNode():因为您知道节点已经加载并打开(您正在响应子节点上的事件),所以您可以确定 setChildOpen 将返回 TreeNode 而不是 null
最后,要将 index 传递给 setChildOpen 方法,只需在父“域对象”列表中使用 indexOf()子级(即 composers.indexOf(composer)composer.getPlaylists().indexOf(playlist) 等)。这假设您可以通过维护双向关系 (playlist.getComposer().getPlaylists().indexOf(播放列表)),或者通过构建子→父关系的映射。

下面是您将从 NoSelectionModelSelectionHandler 调用的一些构建 block :

void toggleComposerOpen(Composer composer) {
int index = composers.indexOf(composer);
TreeNode rootTreeNode = tree.getRootTreeNode();
rootTreeNode.setChildOpen(index, !rootTreeNode.isChildOpen(index));
}

void togglePlaylistOpen(Playlist playlist) {
Composer composer = playlist.getComposer();
TreeNode composerTreeNode = getTreeNode(composer);
int index = composer.getPlaylist().indexOf(playlist);
composer.setChildOpen(index, !composer.isChildOpen(index));
}

private void TreeNode getTreeNode(Composer composer) {
int index = composers.indexOf(composer);
return tree.getRootTreeNode().setChildOpen(index, true);
}

关于java - 如何通过单击文本而不是图标来打开 GWT CellTree 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31582295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com