Использование Smart GWT TreeGrid для навигации - PullRequest
0 голосов
/ 01 февраля 2012

Я работаю над проектом SmartGWT, в котором я бы хотел, чтобы моя основная навигация осуществлялась через сетку деревьев. Древовидная сетка визуализируется правильно, и ее источник данных также функционирует надлежащим образом. Сетка дерева правильно расположена слева от холста mainView.

То, что я не могу понять, это то, как переключать содержимое холста mainView на основе того, что выбрано в NavigationTree. Я имитировал функциональность, которую хотел бы, добавляя новые окна к существующему 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 ]

1 голос
/ 01 февраля 2012

Мне удалось выполнить то, что мне было нужно, со следующим изменением кода обработчика событий:

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);
}

... и следующее изменение моего основного макета интерфейса:

public void setMainView(Canvas canvas)
{
    mainView.destroy();
    mainView = canvas;
    addMember(mainView);
    this.redraw();
}
1 голос
/ 01 февраля 2012

Вы можете сохранить холст 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);
...