我正在开发一个SmartGWT项目,我希望通过treegrid完成主导航。 treegrid具有适当的渲染性,其DataSource也能正常运行。 treegrid正确位于mainView Canvas的左侧。
我似乎无法弄清楚如何根据NavigationTree中选择的内容切换mainView Canvas的内容。我通过向现有Canvas添加新窗口来模仿我想要的功能,但是我找不到一个示例来演示如何完全清除画布并用新窗口替换它。
我在这里走在正确的轨道上吗?任何人都可以指出一个大致显示我想要完成的事情的例子吗?
public class NavigationTree extends TreeGrid {
public NavigationTree(Canvas mainView)
{
setDataSource(NavigationDataSource.getInstance());
setAutoFetchData(true);
setShowHeader(false);
addNodeClickHandler(new NavClickHandler(mainView));
}
// Handler for clicking an item on the Navigation Tree.
private class NavClickHandler implements NodeClickHandler
{
private Canvas mainView;
public NavClickHandler(Canvas mainView)
{
super();
this.mainView = mainView;
}
@Override
public void onNodeClick(NodeClickEvent event)
{
Window window = new Window();
window.setWidth(300);
window.setHeight(230);
window.setCanDragReposition(true);
window.setCanDragResize(true);
window.setTitle(event.getNode().getAttribute("name"));
window.addItem(new Label("huzzah!"));
window.setParentElement(mainView);
window.redraw();
}
}
}
答案 0 :(得分:1)
您可以保留mainView画布,清除其子画面(如果已设置),然后将新创建的窗口设置为新子画面。像下面这样的点击处理程序的主体:
Window window = new Window();
window.setWidth(300);
window.setHeight(230);
window.setCanDragReposition(true);
window.setCanDragResize(true);
window.setTitle(event.getNode().getAttribute("name"));
window.addItem(new Label("huzzah!"));
for (Canvas child: mainView.getChildren()) {
mainView.removeChild(child);
}
mainView.addChild(window);
答案 1 :(得分:1)
我设法通过对事件处理程序代码进行以下更改来完成我所需的工作:
public NavClickHandler(UI ui) //UI extends HLayout
{
this.ui = ui;
}
@Override
public void onNodeClick(NodeClickEvent event) {
Window window = new Window();
window.setWidth100();
window.setHeight100();
window.setHeaderControls(HeaderControls.HEADER_LABEL);
window.setTitle(event.getNode().getAttribute("name"));
window.addItem(new Label("Huzzah!"));
ui.setMainView(window);
}
...以及对我的主UI布局的以下更改:
public void setMainView(Canvas canvas)
{
mainView.destroy();
mainView = canvas;
addMember(mainView);
this.redraw();
}