Gwt2 在onClickHandler中构建时,GWT弹出窗口不居中
我的目标是仅在需要时使用GWT.runSync加载弹出内容 如果我将我的小部件构造为:Gwt2 在onClickHandler中构建时,GWT弹出窗口不居中,gwt2,Gwt2,我的目标是仅在需要时使用GWT.runSync加载弹出内容 如果我将我的小部件构造为: public class CreateButton extends Button { public CreateButton() { super("Create"); buildUI(); } private void buildUI() { final CreateWidget createWidget = new CreateWidget(); final Popu
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();
}
});
}
}
然后弹出窗口将正确居中
如果我在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();
}
});
}
}
弹出窗口将无法正确居中。我尝试过使用setPositionAndShow,但是提供的偏移量是12,即使CreateWidget的宽度和高度实际上都大约是200px
我想使用第二种方法,以便最终在onClick中使用GWT.runAsync,因为CreateWidget非常复杂
我使用的GWT-2.1.1似乎通过延迟呼叫中心而起作用。也许一个一次性计时器也能起作用。在GWT.runAsync中包装buildUI时,延迟调用也有效
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.
});
}
}
}
}