Отображение диалогового окна GWT из обработчика событий

Я пытаюсь отобразить диалоговое окно GWT, когда фиксирую исключение обработчиком событий. Диалоговое окно не отображается. Я подтвердил, что обработчик событий вызывается, потому что

Window.alert("some msg") 

отображает. DialogBox отображается, когда я создаю его вне обработчика событий в объекте View. Я предполагаю, что DialogBox не имеет доступа к текущему дисплею. Есть ли способ отобразить это?

Вот фрагмент кода:

eventBus.addHandler(ProcessingExceptionEvent.TYPE, new ProcessingExceptionEventHandler() {
    public void onProcessingException(ProcessingExceptionEvent event) {
        // Window.alert("some msg");
        final WiseAlertPanel errorAlert = new WiseAlertPanel("ERROR MESSAGE: " + event.getMessage());
        errorAlert.autoPositionAndShow();
    }
});

public class WiseAlertPanel extends DialogBox {
    VerticalPanel vpPopupl = new VerticalPanel();

    public WiseAlertPanel(String text) {
        setGlassEnabled(true);
        Button button = new Button("Close");
        button.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                WiseAlertPanel.this.hide();
            }
        });

        HorizontalPanel hPanel = new HorizontalPanel();
        hPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
        hPanel.add(button);

        TextArea label = new TextArea();
        label.setText(text);
        label.setReadOnly(true);
        label.setVisibleLines(5);

        vpPopupl.add(label);
        vpPopupl.add(hPanel);
        setWidget(vpPopupl);
    }

    public void autoPositionAndShow() {
        setPopupPositionAndShow(new PopupPanel.PositionCallback() {
            public void setPosition(int offsetWidth, int offsetHeight) {
                int left = (Window.getClientWidth() - offsetWidth) / 3;
                int top = (Window.getClientHeight() - offsetHeight) / 3;
                WiseAlertPanel.this.setPopupPosition(left, top);
            }
        });
    }

person user976831    schedule 31.08.2016    source источник
comment
Попробуйте удалить «WiseAlertPanel.this» из своего кода или вызовите напрямую setPopupPositionAndShow вместо autoPositionAndShow.   -  person Andrei Volgin    schedule 31.08.2016


Ответы (1)


Похоже, вы только что создали диалоговое окно «WiseAlertPanel errorAlert» в памяти.

Попробуйте вызвать метод show в «autoPositionAndShow», как показано ниже.

public void autoPositionAndShow() {
    setPopupPositionAndShow(new PopupPanel.PositionCallback() {
        public void setPosition(int offsetWidth, int offsetHeight) {
            int left = (Window.getClientWidth() - offsetWidth) / 3;
            int top = (Window.getClientHeight() - offsetHeight) / 3;
            WiseAlertPanel.this.setPopupPosition(left, top);
            show();
        }
    });
}

Ссылка GWT DialogBox show( )

person Gavy    schedule 14.09.2016