使用Smart GWT TreeGrid进行导航

时间:2012-01-31 22:14:21

标签: java navigation smartgwt treegrid

我正在开发一个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();
        }
    }
}

2 个答案:

答案 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();
}