0

我正在开发一个 SmartGWT 项目,我希望通过树形网格完成我的主要导航。treegrid 呈现正确,其 DataSource 也正常运行。treegrid 正确地位于 mainView 画布的左侧。

我似乎想不通的是如何根据在 NavigationTree 中选择的内容来切换 mainView 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();
        }
    }
}
4

2 回答 2

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);
于 2012-02-01T16:26:39.720 回答
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();
}
于 2012-02-01T16:29:35.877 回答