GWT: Как центрировать элемент, содержащий CellTable?

Я пытаюсь центрировать элемент, который содержит CellTable, Фактическая логика центрирования работает хорошо, но у меня проблемы со всеми этими присоединениями / отсоединениями событий. По сути, я делаю это в моем контейнере виджета:

@Override
public void onLoad() {
  super.onLoad();
  center();
}

Тем не менее, кажется, что onLoad на контейнере не означает, что все дочерние элементы загружены, так что... фактическая процедура центрирования вызывается слишком рано и Element.getOffsetWidth/getOffsetHeight оба возвращаются 0, В результате контейнер отображается с левым верхним углом в центре экрана.

То же самое происходит, если я использую AttachEvent.Handler на CellTable,

Итак... есть ли событие на CellTableили на Widget или что-то, что позволяет мне запускать действие, когда поддерево DOM было присоединено к DOM?

Заранее спасибо.

2 ответа

Решение

Посмотрите на scheduleDeferred. Отложенная команда выполняется после возврата из цикла событий браузера.

Scheduler.get().scheduleDeferred(new ScheduledCommand() {
    @Override
    public void execute() {
        center();
    }
});

Override onAttach вместо onLoad, onAttach вызовы реализации по умолчанию onLoad с последующим doAttachChildren (который вызывает onAttach на каждом дочернем виджете), поэтому следующий код должен вызывать center после того, как дети были прикреплены:

@Override
public void onAttach() {
  super.onAttach();
  center();
}

(Кстати, реализация по умолчанию onLoad это неоперация)

Другие вопросы по тегам