GWT Закрыть всплывающие панели правильно? - PullRequest
0 голосов
/ 11 апреля 2011

Я хочу закрыть всплывающую панель, щелкнув якорь, но этот якорь может находиться внутри нескольких панелей, тогда переходить к родителям не очень хорошая идея.

Как мне получить всплывающую панель, где находится якорь?

Ответы [ 2 ]

2 голосов
/ 11 апреля 2011

А как насчет передачи переменной с PopupPanel в другие панели?

public class PanelWithPopup extends Composite
{
    FlowPanel thisPanel = new FlowPanel();
    PopupPanel popup = new PopupPanel();
    SomeOtherPanel otherPanel;

    public PanelWithPopup()
    {
        // pass the popup panel to the SomeOtherPanel
        otherPanel = new SomeOtherPanel(popup);

        thisPanel.add(otherPanel);
        initWidget(thisPanel);
    }
}

public class SomeOtherPanel
{
    PopupPanel popup;

    public SomeOtherPanel(PopupPanel p)
    {
        this.popup = p;
    }

    void hidePopup()
    {
        popup.hide();
    }
}

Или, если другие панели были определены внутри главной панели (то есть, если SomeOtherPanel было определено в PanelWithPopup), вы можете получить прямой доступ к PopupPanel popup.

0 голосов
/ 07 июня 2019

Если вы хотите закрыть все открытые всплывающие панели.Например: если пользователь нажимает кнопку «Назад», или ваша кнопка привязки вызывает изменение страницы.Вы можете использовать этот метод:

public static void closeAllPopups() {
    for (int i=0; i<RootPanel.get().getWidgetCount(); i++) {
        if (RootPanel.get().getWidget(i) instanceof PopupPanel) {
            PopupPanel popupPanel = (PopupPanel)RootPanel.get().getWidget(i);
            Scheduler.get().scheduleDeferred(() -> popupPanel.hide());
        }
    }
}
...