Пожалуйста, объясните мне модель компоновки (и изменения размера) Ext-GWT - PullRequest
0 голосов
/ 11 января 2010

Кажется, я не могу понять, как сделать правильный макет в Ext GWT, который правильно реагирует на изменения размера.

Я предполагаю, что могу декларативно указывать макеты, помещать в них свои компоненты и позволять библиотеке позаботиться обо всем остальном; Я просто еще не понял, как это сделать. Что я действительно не хочу делать, так это писать обработчики изменения размера для моих компонентов, чтобы вычислять и устанавливать размер подкомпонентов при каждом событии изменения размера.

Мое приложение должно заполнять все окно браузера и состоит из нескольких вкладок. Каждая вкладка должна заполнять оставшееся пространство, доступное после панели вкладок. На самом деле, это проблема, которую я продолжаю иметь. У меня есть элементы управления фиксированного размера в верхней или левой части экрана / компонента (панель инструментов, панель папок и т. Д.), А оставшиеся элементы управления должны занимать оставшуюся часть доступного пространства.

Я уже понял, что должен использовать Viewport в качестве моего компонента верхнего уровня, и, вероятно, FitLayout должен где-то там учитывать. Но какой тип макета с учетом изменения размера я использую, чтобы выделить немного места для моих элементов управления фиксированного размера (предпочтительно их естественного размера, чтобы мне не нужно было указывать это также), и чтобы другие элементы управления заняли оставшуюся часть?

И правильно ли, что я создаю свои пользовательские элементы управления (как комбинацию существующих элементов управления) как подкласс LayoutContainer? До сих пор я использовал LayoutContainers с субконтролями FlowLayout и фиксированного размера, и хотя это работает в некотором смысле, он не может отвечать на изменения размера родительского контейнера, что мне кажется важным.

Я пытаюсь понять, как библиотека хочет, чтобы я это делал, но документации, похоже, мало. Любое понимание будет с благодарностью.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2010

RowLayout с RowData (двойная ширина, двойная высота) позволяет динамически изменять размеры макетов.

Значения, меньшие или равные 1, считаются в процентах. Значения больше единицы обрабатываются как пиксели. Вы также можете использовать -1, чтобы использовать вычисленную высоту компонента.

Я создаю изменяемые размеры окон, которые имеют TabPanels и другие компоненты, используя RowLayout. Иногда динамическое скрытие / отображение компонентов может вызвать проблемы с макетом, поэтому вам необходимо добавить прослушиватели, которые вызывают layout () для родительского контейнера.

0 голосов
/ 12 марта 2010

Все, что вы описываете, звучит прямо для меня. Добавьте Viewport в RootPanel, создайте свои пользовательские компоненты в качестве подкласса LayoutContainer и т. Д.

Если вы используете GXT Composite вместо расширения LayoutContainer, вы можете столкнуться с проблемами, поскольку у контейнера могут возникнуть проблемы при разработке возможностей вашего пользовательского компонента, но LayoutContainer должен подойти.

Как вы добавляете свои панели инструментов и т. Д. Добавляете ли вы их в свой расширенный LayoutContainer? Если это так, то вам может быть лучше расширить подкласс LayoutContainers вместо ContentPanel. ContentPanel имеет встроенные держатели, подходящие для панелей инструментов, например. использовать ContentPanel.setTopComponent (панель инструментов).

...