Добавление обработчика изменения размера в VerticalPanel в GWT - PullRequest
6 голосов
/ 07 августа 2009

Как добавить слушателя / обработчик в VerticalPanel так, чтобы он срабатывает при изменении размера VerticalPanel?

Я в основном пробовал следующее:

VerticalPanel myPanel = new VerticalPanel();
//... code to add child widgets that may change the size of the parent vertical panel ...

myPanel.addHandler(new ResizeHandler() {
  public void onResize(final ResizeEvent event) {
    //... code to handle resize of vertical panel ...
  }

}, ResizeEvent.getType() );

но обработчик не срабатывает.

Ответы [ 2 ]

16 голосов
/ 03 октября 2009

Надежно работает прослушиватель изменения размера на уровне окна:

Window.addResizeHandler(new WindowResizeHandler())

Ваш обработчик изменения размера будет вызываться, когда пользователь изменяет размер окна браузера:

public void onResize(ResizeEvent event)

Вы можете использовать event.getHeight() и event.getWidth(), чтобы получить обновленные размеры окна.

Поскольку вы получаете событие только для окна в целом, вам придется самостоятельно распространять компоненты, которые вы хотите выложить. Обычно я просто вызываю собственный метод doLayout(). Этот метод даже не нуждается в высоте и ширине события изменения размера, поскольку, поскольку DLH уже комментирует, вы можете запросить большинство компонентов об их размерах, когда получите уведомление, и выполнить ваши вычисления с этим.

К сожалению, некоторые браузеры не очень часто делают onResize. Стараясь не сходить с ума от обновлений, они могут иногда удерживать событие в течение нескольких секунд, оставляя ваше приложение заметно уродливым, ожидая «правильного» макета. Таким образом, где это возможно, вы должны стараться оставить макет для CSS и, возможно, в зависимости от вашей позиции в войне «таблицы против CSS», таблицы.

5 голосов
/ 07 августа 2009

VerticalPanel не запускает никаких событий. Добавление этих событий на самом деле невозможно, так как браузер не поддерживает события изменения размера таблицы (или DIV, или практически любой элемент HTML).

Какой эффект вы хотели бы получить? Вы хотите получать уведомления, когда myPanel изменяется? тогда, возможно, вам следует расширить VerticalPanel и запустить пользовательское событие при добавлении или удалении виджетов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...