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.
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.