Стандартный метод center()
не делает то, что вы хотите. Таким образом, вы должны рассчитать позицию самостоятельно. Есть одна большая проблема, которая заключается в том, что у вашего всплывающего окна нет размера до его фактического показа. Размер любого элемента DOM не может быть запрошен, пока он не будет полностью присоединен к DOM. Вы должны унаследовать класс всплывающих окон GWT и переопределить метод onLoad()
, чтобы получить размер всплывающего окна. Попробуйте что-то вроде этого:
public class CenteredDialogBox extends DialogBox {
private Widget _parent;
public CenteredDialogBox(Widget parent) {
_parent = parent;
}
@Override
public void onLoad() {
super.onLoad();
int parentMiddle = _parent.getAbsoluteLeft() + _parent.getOffsetWidth() / 2;
int popupLeft = parentMiddle - getOffsetWidth() / 2;
int parentCenter = _parent.getAbsoluteTop() + _parent.getOffsetHeight() / 2;
int popupTop = parentCenter - getOffsetHeight() / 2;
setPopupPosition(popupLeft, popupTop);
}
}