0

私はSmartGWTプロジェクトに取り組んでおり、メインナビゲーションをツリーグリッド経由で実行したいと考えています。ツリーグリッドは適切にレンダリングされ、そのデータソースも適切に機能しています。ツリーグリッドは、mainViewCanvasの左側に正しく配置されています。

私が理解できないのは、NavigationTreeで選択されている内容に基づいてmainViewCanvasのコンテンツを切り替える方法です。既存のキャンバスに新しいウィンドウを追加することで必要な機能を模倣しましたが、キャンバスを完全にクリアして新しいウィンドウに置き換える方法を示す例が見つかりません。

私はここで正しい方向に進んでいますか?私が達成しようとしていることを大まかに示す例を誰かに教えてもらえますか?

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

イベント ハンドラー コードを次のように変更することで、必要なことを達成できました。

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 に答える
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 に答える