Flex: как создать совершенно новый компонент? - PullRequest
5 голосов
/ 28 января 2009

Я бы хотел разработать приложение сетевого графика для Flex - представьте себе, что вы размещаете узлы на Canvas и соединяете их ссылками. Узлы должны иметь редактируемый текст и другие компоненты пользовательского интерфейса.

Я пытаюсь найти примеры создания совершенно нового компонента пользовательского интерфейса с нуля, но все, что я смог найти, это тривиальные примеры, расширяющие существующие компоненты: RedButton, например, Button, или ComboBox, есть состояния на выбор.

Мой главный вопрос: какой метод ActionScript определяет рисование компонента? Что такое эквивалент ActionScript Java-метода paint ()?

Ответы [ 5 ]

5 голосов
/ 28 января 2009

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

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
  super.updateDisplayList( unscaledWidth, unscaledHeight );

  // The drawing API is found on the components "graphics" property
  graphics.clear();
  graphics.lineTo( 0, unscaledWidth );
  // etc
}

Более подробную информацию можно найти здесь: http://livedocs.adobe.com/flex/3/html/help.html?content=ascomponents_advanced_3.html

4 голосов
/ 28 января 2009

Я бы посоветовал взглянуть на проект flexlib , если вам нужны примеры пользовательских компонентов.

Хорошая общая информация в liveocs здесь

Хотя вы можете создавать собственные компоненты в MXML и в ActionScript, я бы порекомендовал реализовать их в ActionScript.

Короче, это то, что вам нужно сделать:

Когда вы создаете пользовательский компонент в ActionScript, вы должны переопределить методы класса UIComponent. Вы реализуете базовую структуру компонентов, конструктор и методы createChildren (), commitProperties (), measure (), layoutChrome () и updateDisplayList ().

3 голосов
/ 28 января 2009

Рекомендую прочитать серию из пяти статей Петера Энта по созданию пользовательских компонентов. Здесь - ссылка на Часть 1.

Также рекомендуется, серия руководств по ItemRenderers и ItemEditors .

1 голос
/ 29 января 2009

Типичным поведением является создание подкласса для существующего компонента, главным образом потому, что большая часть работы по реализации функциональности стольких наиболее типичных компонентов уже выполнена для вас - вам просто нужно знать, какой компонент больше всего похож тот, который вы хотите создать. (Сам по себе вызов, учитывая, сколько их.)

Если вам нравится, вы можете создать довольно простой UIComponent "с нуля", просто расширив UIComponent (который даст вам все базовые вещи), или, я полагаю, если вы действительно идет в минимализме, и вы готовы принять вызов, вы можете просто реализовать IUIComponent и определить каждый метод интерфейса вручную. Если вы решите пойти по второму пути, сделайте себе одолжение и сначала прослушайте этот доклад - это подробное обсуждение архитектуры компонентов Flex, которое дал один из инженеров команды Flex. , Я рекомендую это часто и очень; это превосходно, и он проясняет ряд деталей разработки компонентов, которые все еще не так хорошо документированы. Чрезвычайно ценный материал, если вы собираетесь создавать нетривиальные пользовательские компоненты того типа, который вы описываете.

Надеюсь, это поможет. Удачи!

1 голос
/ 29 января 2009

Глава 19 «Программирование Flex 2» Казуна и Лотта показывает модель события строительства, а также модель события обновления.

Короче говоря, в структуре компонентов Flex предполагается, что у вас есть свойства объекта, которые влияют на его внешний вид. Вместо немедленного применения изменений он позволяет мутаторам свойств аннулировать «содержимое» компонента (например, текст) с помощью унаследованного метода invalidateProperties (). Один также вызывает invalidateSize (), когда изменение свойства, ммм, изменит размер компонента, и invalidateDisplayList (), когда вещи должны быть перерисованы (в отличие от просто другого текста).

Эта модель аннулирования оптимизирует работу компонента. Он не измеряет себя, пока не узнает, что изменил размер; он не размещает и не отрисовывает себя, если не имеет значения invalidateDisplayList () с момента последнего обновления своего макета; и он не перемещает значения своих свойств в свои подкомпоненты, если не знает, что эти значения изменились.

Приветствия

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