Знайте, Intuit, лекция пакет

Контейнер контейнер е описан клас. който е приемник на компонент. и поради това, че има всички характеристики на графичния компонент. Въпреки това, основната му задача - да групира други компоненти. За тази цел, той обяви редица методи. Метод служи за добавяне на добавка. за да се отстрани - премахване и removeAll (последното премахва всички компоненти).

Добавените компоненти се съхраняват в един подреден списък, така че можете да укажете да се премахне всяко позоваване на компонента, които ще бъдат премахнати, или сериен номер на контейнера. Също така дефинирани методи за компонентите, присъстващи в съда, - всички от тях са доста очевидно, така че да се изброяват с кратко обяснение:

  • getComponent (междинно съединение п) - връща компонент е посочено на броя;
  • getComponents () - връща всички компоненти под формата на масив;
  • getComponentCount () - връща броя на елементите;
  • getComponentAt (междинно съединение X, Int у) или (точка Р) - връща компонент, който включва посочения точка;
  • findComponentAt (междинно съединение X, Int у) или (точка Р) - връща видима компонента, включително определена точка.

Вече знаем, че позицията на компонент (местоположението) се определя от координатите на горния ляв ъгъл. Важно е, че тези стойности са измерени от горния ляв ъгъл на контейнера, който по този начин е в центъра на координатната система, за всеки компонент намира в него. Ако местоположението е важно да компонента на екрана, независимо от неговата опаковка, това е възможно да се използват getLocationOnScreen метода.

Заради наследството контейнер също има имот размер. Този размер се определя независимо от размера и позицията на вложените компоненти. Така, компонентите могат да бъдат разположени изцяло или частично извън неговия контейнер (това означава, ще бъдат обсъдени по-долу, но основно това е приемливо).

След като контейнерът е наследен от компонент. той е компонент, и по този начин може да се добави друг контейнер нагоре. В същото време, на компонента, може да бъде само в един контейнер. Това означава, че всички елементи на една сложна потребителски интерфейс са комбинирани в йерархична дърво. Тази организация не само опростява операции по тях, но и определя основните свойства на целия AWT работата. Един от тях е на принципа на рисуване компоненти.

рендиране алгоритъм

Нека започнем с изготвянето отделен компонент - който определя външния му вид?

За този проблем е начинът на боя. Този метод се нарича всеки път, когато искате да покажете на компонента на екрана. Той има само един аргумент, чийто тип - абстрактни Graphics клас. В този клас, ние се определи набор от методи за оказване на прости графични елементи - линии, правоъгълници и многоъгълници, кръг, текст, изображения и т.н.

Компонент наследници клас отменят метода на боя и с помощта на методите на графики. настроите изготвянето алгоритъм на външния им вид:

Разберете текущата стойност на цветопредаване е възможно с помощта getColor метод.

метод шнур е без аргументи, задаване на шрифт за показване на текст на екрана. Този параметър е също част от държавата Graphics. Стойността му по подразбиране е зададена съответния компонент свойства, обаче, може да бъде променена с помощта на setFont метод. За текущата стойност е метод getFont.

Clip (ограничител)

Въпреки че методите Graphics клас могат да предприемат каквито и да било аргументи ценности, определящи стойности на координатите (в рамките тип Int), има допълнителна ограничител - клип. Всички промени, извън тази спирка, на екрана няма да се появят. Например, ако метода причина drawLine (-100, -100, 1000, 1000). След това компонентът ще се показва само част от линията, която се поставя в нейните граници.

ограничител може да се преоразмерява. Метод clipRect (междинно съединение X, Int у, ширина ср, височина Int) Изчислява сечението на споменатата правоъгълна област и текущия файл. Резултатът ще бъде един нов стоп. По този начин, този метод може да се стесни само обхват клипа. Метод setClip (междинно съединение X, Int у, ширина ср, височина Int) произволно определя ограничител под формата на правоъгълник. метод getClipBounds връща текущата стойност на един правоъгълник обект.

Когато прилагането на екрана всеки вижда компонент трябва да бъде направен напълно. Ето защо, първо метода на повикване боя. обикновено клип област съвпада с границите на отделните компоненти. Въпреки това, ако по-нататъшната работа не винаги е така.

Да разгледаме следния пример:

Както се вижда от кода при всяко извикване на метод боя да се генерира нова стойност на цвят, а след това този цвят е боядисан в целия компонент. Въпреки това, тъй като има в ограничителя на графика са сенчести места само ще бъде изкривен. което ще й позволи да се види.

След провеждане на софтуерния компонент ще бъде напълно оцветени с един цвят. Ако сега се използват мишката, за да "вземе" прозорец от някои други приложения и бавен "прекарат" ги на върха на компонента, тя ще се превърне за по този начин (вляво на снимката):

Ако се направи бързо, можете да получите картина, подобна на правото в примера по-горе. Ясно се вижда, че компонентът не е напълно преобразена, и части. Ограничителят се определя в съответствие с областта, която е била "счупен" и трябва да бъде преобразена. За сложни компоненти могат да влязат в логиката на това, с помощта на щипката. Той няма да направи всички елементи, но само някои от тях, за да се увеличи производителността.

Методи пребоядиса и актуализация

В допълнение към боя в Компонент клас има два метода са обявени, отговорни за изготвянето компонент. Както казахме, кол-боята е по инициатива на операционната система, ако е необходимо, за да прехвърлите прозореца на приложението, или на част от него. Въпреки това, може да се наложи да се актуализира външния вид, като се ръководи от логиката на програмата. Така например, показва резултат изчисляване на операцията, или работата с мрежата. Можете да промените състоянието на компонент (на стойността на неговите полета), но операционната система не може да открие промяната и не предизвика пречертаването.

За софтуер инициализация прекрояване компонент служи пребоядиса метод. Разбира се, че не разполага с аргумент от тип Graphics. защото програмистът не трябва да се създаде копия на този клас (или по-скоро, неговите наследници, защото Graphics - абстрактен клас). Пребоядиса метод може да се нарече без аргументи. В този случай, компонентът ще бъде пребоядисан възможно най-бързо. Можете да зададете един аргумент от тип дълъг - броят на милисекунди. Системата започва пречертаването след определеното време. Можете да се посочи четири вида инт (X, Y, ширина, височина), чрез задаване на правоъгълна област на компонента, който трябва да бъде преобразена. И накрая, можете да укажете всички параметри на 5 - и времезакъснението и региона, за да се пребоядиса.

Ако преначертаване започна прилагането, системата няма да доведе до метода на боя. и начин актуализация. Той вече има един аргумент от тип графика, и по подразбиране само изпълва цялата площ на компонент цвета на фона на (собственост фон), а след това се вика метода боя. Защо се въведе този допълнителен метод, ако можете да се обадите веднага боя. Факт е, че тъй като започне прилагането на пречертаването за сложни компоненти става възможно да се актуализират някои вид оптимизация. Например, ако промяната е появата на нов графичен елемент, е възможно да не се налага, за да прехвърлите на останалите елементи - да се замени метода на актуализация и да го приложи в показването на само един нов елемент. Ако компонентът има проста структура, може да се остави непроменена метод актуализация.

изготвяне на контейнера

Сега, когато е известно как рисунка компонент, обръщайки се към контейнера. За правилното му дисплей, което трябва да направите две неща. На първо място, съставя самия контейнер, защото той е наследник на компонентите и по този начин има метод за боя. които могат да бъдат предефинирани да се уточни специалното участие на такъв контейнер. Второ, наредете теглене на всички компоненти, вградени в него.

Първата стъпка е не се различава от конвенционалната рендиране компонент. Обикновено, контейнерът не съдържа специфични елементи на дисплея, тъй като основната си площ, заета от вложени компоненти. Така че нека да стигнем до втория етап.

Ако контейнерът е празен, това означава, че тя има един или повече компоненти. Те ще бъдат изготвени последователно в реда, в който са били добавени. Не е достатъчно просто да се предизвика цикъл на метода на боя за всеки компонент.

На първо място, ако компонентът не се вижда (видим имот е изложена на фалшива), а след това, разбира се, тя метод-боя не трябва да се нарича.

На второ място, координати център на компонента се намира в горния ляв ъгъл на неговата опаковка и контейнера - в горния ляв ъгъл на неговата опаковка. По този начин, по време на прехода от контейнера за изготвяне на чертежа лежи в него компонент трябва да се промени (ход) в центъра на координатната система.

След това клипът трябва да бъде инсталиран в съответствие с размера на следващия компонент. Необходимо е да се определят стойностите по подразбиране за цвят и шрифт, толкова повече, че предишното компонент може да ги промени по непредвидим начин.

Резултатът е по-удобно да се създаде нова инстанция на Графичния за всеки компонент. За това има метод за създаване на. което създава копие на Графичния. където е възможно да се премине аргументи (междинно съединение X, Int Y, ширина ср, височина Int). В резултат на нови графика ще се измести центъра координатите на точка (х, у), и каквото е получено от пресичането на домейн съществуващ ограничител правоъгълник (0, 0, широчина, височина) (в новите координати). създаде метод създава копие, без да променяте тези настройки.

Такова копие е удобно да се произвеждат в един разговор метода на боя. ако това е твърде сложно алгоритъм е описан. След като сте използвали такъв Графичен обект трябва да бъдат специално освободи - наричайки се разпорежда (). Ако имате нужда да се движи само координатите отправна точка, можете да използвате метода на преведат (инт х, вътр Y).

По този начин, начина му на боя контейнер се и всички свързани компоненти в него обръща. Ако някои от тях, от своя страна, са контейнери, след което процесът продължава йерархично по-дълбоко. В резултат на това цялата AWT интерфейс, без значение колко трудно може да бъде, е направена от дървени съдове и компоненти, правейки се започне с горната част на контейнера и по клоните на развиващите се в дълбочина на всеки вижда компонент.

От особен интерес е, че най-отгоре контейнера. Като правило, това е операционната система на един прозорец в същото време е контейнер за Java-базирани компонент. Това е операционната система инициализира процеса на рендиране, е отговорен за сгъването и разгъването на прозореца, той преоразмеряване и така нататък. От страна на Java да работят с помощта на прозореца прозорец клас. който е приемник на контейнер и се обсъжда по-долу.