Когда подходящее время для вызова UIObject.getOffsetWidth?

Я хочу получить смещение Uiobject в GWT. но это значение зависит от:

  1. где этот объект прикреплен или нет?
  2. где относительный css загружен или нет?
  3. Размер объекта может быть изменен в обратном вызове onload.
  4. ...

Итак, все усложняется, особенно когда вы хотите получить это значение FlowPanel,Label,InlineLabel и т. д., размер которого рассчитывается динамически.

мой вопрос: когда или как правильно получить смещение?

1 ответ

Решение

Вы можете получить правильный размер только после полной визуализации страницы. В противном случае вы получите нулевые значения. Как правило, есть два варианта использования:

(A) Скажите браузеру, чтобы вы сделали ваш вид. Затем с помощью планировщика убедитесь, что браузер завершил рендеринг, прежде чем проверять размеры:

Scheduler.get().scheduleDeferred(new ScheduledCommand() {
    @Override
    public void execute() {
        int width = myPanel.getOffsetWidth();
        // do something with this width
    ]
]

(B) Присоедините обработчик изменения размера к окну. Если пользователь изменяет размер окна браузера, вся ширина и высота могут измениться. Вам не нужно использовать планировщик в ResizeHandler - браузер завершит повторную визуализацию страницы перед вызовом ResizeHandler.

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