Domanda

Io uso popup GWT a mostrare alcuni messaggi, ma non viene visualizzato nelle centro della manifestazione di visualizzazione se chiamo popup.center (). In realtà non è centrata solo la prima volta, se chiudo e apro di nuovo ogni cosa è ok, ma non la prima volta. Come risolvere questo?

GWT.runAsync(new RunAsyncCallback() {
    @Override
    public void onSuccess() {
        Image fullImage = new Image(optionImageName);
        fullImage.setAltText("Loading image ...");
        imagePopup.setWidget(fullImage);
        imagePopup.center();
    }
});

Ho trovato questa domanda http: //www.devcomments .com / gwt-Popup-is-not-centrato-at107182.htm , e oggi ho avuto anche questo problema. Ho trovato la risposta e mi post qui per riferimenti futuri.

È stato utile?

Soluzione

ho scoperto che il problema è che l'immagine non viene caricata completata quando si centra il popup. Questo accade per la prima volta solo perché la seconda volta che l'immagine è in qualche modo incassato dal browser.

La soluzione è quella di centrare l'evento onLoad pure.

GWT.runAsync(new RunAsyncCallback() {
    @Override
    public void onSuccess() {
        Image fullImage = new Image(optionImageName);
        fullImage.setAltText("Loading image ...");
        fullImage.addLoadHandler(new LoadHandler() {
            @Override
            public void onLoad(LoadEvent event) {
                imagePopup.center();
            }
        });
        imagePopup.setWidget(fullImage);
        imagePopup.center();
    }
});

Altri suggerimenti

Ho avuto questo problema pure. La ragione per cui si deve call center per due volte è perché il contenitore popup viene effettivamente rimosso dal DOM quando il popup viene "nascosto". Questo è problematico perché il popup deve ora "mostrare" il contenuto del pop-up prima di poter verificare che l'immagine viene caricata.

Il problema con l'implementazione raccomandata è che la prima chiamata al centro () sarà fatto in modo non corretto se l'immagine non viene memorizzata nella cache. La seconda chiamata al centro sarà correggerlo. Nel browser, questo provoca uno spostamento della finestra di pop-up di dialogo (che sembra piuttosto male).

mi sento di raccomandare quanto segue: 1. Mettere un filatore di attesa nello stesso display e dimostrare che inizialmente. 2. Uno il loadHandler è chiamata, visualizzare l'immagine, nascondere la filatrice, e ricentrare.

    public void onClick(ClickEvent event) {
            // TODO Auto-generated method stub
            final ADPopup popup = new ADPopup();
            popup.setHeight("300px");
            popup.setWidth("500px");
            popup.setPopupPositionAndShow(new PopupPanel.PositionCallback() {

                public void setPosition(int offsetWidth, int offsetHeight) {
                    // TODO Auto-generated method stub
                    int left = (Window.getClientWidth() - offsetWidth) / 3;
                    int top = (Window.getClientHeight() - offsetHeight) / 3;

                    popup.setPopupPosition(left, top);
                }
            });

            popup.show();
        }

Spero che questo aiuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top