GWT popup non è centrata quando costruito all'interno onClickHandler

StackOverflow https://stackoverflow.com/questions/8305971

  •  25-10-2019
  •  | 
  •  

Domanda

Il mio obiettivo è quello di utilizzare GWT.runSync per caricare solo i contenuti popup quando richiesto.

Se io costruisco la mia widget come:

public class CreateButton extends Button {

public CreateButton() {
    super("Create");
    buildUI();
}

private void buildUI() {

    final CreateWidget createWidget = new CreateWidget();

    final PopupPanel popupPanel = new PopupPanel(false);
    popupPanel.setWidget(createWidget);
    popupPanel.setGlassEnabled(true);
    popupPanel.setAnimationEnabled(true);
    addClickHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            popupPanel.center();

        }
    });
}
}

Poi il popup sarà centrata correttamente.

Se io costruisco il popup all'interno del clickHandler:

public class CreateButton extends Button {

public CreateButton() {
    super("Create");
    buildUI();
}

private void buildUI() {

        @Override
        public void onClick(ClickEvent event) {
            final CreateWidget createWidget = new CreateWidget();

            final PopupPanel popupPanel = new PopupPanel(false);
            popupPanel.setWidget(createWidget);
            popupPanel.setGlassEnabled(true);
            popupPanel.setAnimationEnabled(true);
            addClickHandler(new ClickHandler() {

            popupPanel.center();

        }
    });

}
}

Il popup non centrare correttamente. Ho provato utilizzando setPositionAndShow, tuttavia gli offset forniti sono 12, anche se il CreateWidget è in realtà circa 200px per larghezza e altezza.

Vorrei utilizzare il secondo metodo in modo da poter eventualmente utilizzare GWT.runAsync all'interno del onClick come CreateWidget è molto complesso.

Sto usando GWT-2.1.1

È stato utile?

Soluzione

sembra funzionare ritardando la chiamata alla centrale. Forse una volta fuori timer avrebbe funzionato pure. Ritardare la chiamata funziona anche quando la confezione buildUI entro GWT.runAsync

public class CreateButton extends Button {

    public CreateButton() {
        super("Create");
        buildUI();
    }

    private void buildUI() {

        @Override
        public void onClick(ClickEvent event) {
            final CreateWidget createWidget = new CreateWidget();

            final PopupPanel popupPanel = new PopupPanel(false);
            popupPanel.setWidget(createWidget);
            popupPanel.setGlassEnabled(true);
            popupPanel.setAnimationEnabled(true);
            addClickHandler(new ClickHandler() {

                Scheduler.get().scheduleFixedDelay(new RepeatingCommand() {

                    @Override
                    public boolean execute() {

                        popupPanel.center();
                        return false;

                    }
                }, 50); //a value greater than 50 maybe needed here.
            });    
        }
    }

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