Cunoaște Intuit, pachetul de curs
Container Un container este descris de clasă. care este succesorul componentei. și, prin urmare, are toate caracteristicile componentei grafice. Cu toate acestea, sarcina sa principală - la categoria de alte componente. În acest scop, acesta a anunțat o serie de metode. Metoda servește pentru a adăuga adăugare. pentru a elimina - elimina și removeAll (acesta din urmă elimină toate componentele).
Componentele adăugate sunt stocate într-o listă ordonată, astfel încât să puteți specifica pentru a elimina orice referire la componenta care vor fi eliminate, sau un număr de serie al containerului. De asemenea, metode pentru componentele prezente în container, definit - toate acestea sunt destul de evidente, astfel încât să le lista cu o scurtă explicație:
- getComponent (int n) - returnează componenta indicată de numărul;
- getComponents () - returnează toate componentele sub forma unei matrice;
- getComponentCount () - returnează numărul de componente;
- getComponentAt (int x, int y) sau (punctul p) - returnează componenta care include punctul specificat;
- findComponentAt (int x, int y) sau (punctul p) - returnează componenta vizibilă inclusiv un punct specificat.
Știm deja că poziția componentei (locația) este definită de coordonatele colțul din stânga sus. Este important ca aceste valori sunt măsurate din colțul din stânga sus al containerului, care, astfel, este centrul sistemului de coordonate pentru fiecare componentă situată în acesta. Dacă locația este importantă pentru componenta de pe ecran, indiferent de recipientul său, este posibil să se utilizeze metoda getLocationOnScreen.
Din cauza container moștenire are, de asemenea, o proprietate dimensiune. Această dimensiune este setată, indiferent de mărimea și poziția componentelor imbricate. Astfel, componentele pot fi situate parțial sau în totalitate în afara containerului său (care mijloacele vor fi discutate mai jos, dar practic acest lucru este acceptabil).
Odată ce containerul este moștenit de la Component. el este o componentă, și, prin urmare, poate fi adăugat la celălalt recipient din amonte. În același timp, componenta poate fi într-un singur container. Acest lucru înseamnă că toate elementele unei interfețe de utilizator complexe sunt combinate într-un arbore ierarhic. Această organizație nu numai că simplifică operațiunile de pe ele, ci stabilește, de asemenea, proprietățile de bază ale întregii lucrări AWT. Una dintre ele este principiul componentelor desen.
algoritm de redare
Să începem cu desen componente individuale - care determină aspectul?
Pentru această problemă este metoda de vopsea. Această metodă se numește de fiecare dată când doriți să afișați componenta pe ecran. El are un singur argument al cărui tip - Grafică clasă abstractă. În această clasă, definim un set de metode pentru redare elemente grafice simple - linii, dreptunghiuri și poligoane, cercuri, ovale, text, imagini, etc.
mostenitori clasa Component suprascrie metoda de vopsea și utilizând metodele grafice. set de desen algoritmul apariției lor:
Aflați valoarea curentă pentru redarea culorilor este posibilă prin intermediul getColor metoda.
Metoda drawstring nu are argumente, setați fontul pentru a afișa textul de pe ecran. Acest parametru este, de asemenea, o parte a statului Graphics. Valoarea sa implicită este setată de proprietăți a componentelor corespunzătoare, cu toate acestea, pot fi modificate utilizând metoda setFont. Pentru valoarea curentă este metoda getFont.
Clip (limitator)
Deși metodele de clasă grafice pot lua orice valori argument care definesc valorile coordonatelor (cadrul de tip int), există un limitator suplimentar - clip. Orice modificări în afara această oprire pe ecran nu va apărea. De exemplu, în cazul în care metoda drawLine cauza (-100, -100, 1000, 1000). atunci componenta va afișa doar o parte a liniei, care este plasat în granițele sale.
Limitatorul poate fi redimensionate. Metoda clipRect (int x, int y, int latime, inaltime int) calculează intersecția respectivei regiuni dreptunghiulare și clipul curent. Rezultatul va fi o nouă oprire. Astfel, această metodă se poate restrânge doar clipul domeniul de aplicare. Metoda setClip (int x, int y, int latime, inaltime int) stabileste arbitrar un limitator sub forma unui dreptunghi. Metoda getClipBounds returnează valoarea curentă a unui obiect dreptunghi.
În cazul în care cererea de pe ecran fiecare componentă vizibilă trebuie să fie redat complet. Prin urmare, prima metodă de vopsea de apel. în general, regiunea clip coincide cu limitele componente. Cu toate acestea, în cazul în care locul de muncă în continuare nu este întotdeauna cazul.
Luați în considerare următorul exemplu:
După cum se vede din codul de la fiecare metodă de vopsea de apel este generată o nouă valoare de culoare, atunci această culoare este vopsit pe toată componenta. Zona Cu toate acestea, din moment ce există în limitatorul grafice sunt umbrite va decupa numai. care îi va permite să vadă.
După rularea componenta software-ul va fi complet colorat cu o singură culoare. Dacă utilizați acum mouse-ul pentru a „lua“ o fereastră de alte aplicații și lent „cheltui“ le pe partea de sus a componentei, se va transforma despre în acest fel (imaginea din stânga):
Dacă face rapid, veți obține o imagine similară cu dreapta, în exemplul de mai sus. Se vede clar că componenta nu este complet redesenată, și piese. Limitatorul este stabilit în conformitate cu zona care a fost „rupt“ și trebuie să fie redesenat. Pentru componente complexe pot intra în logica pe care, folosind clema. Acesta nu va atrage toate elementele, dar numai unele dintre ele, pentru a crește productivitatea.
Metode vopsi și actualizare
În plus față de vopsea în clasa Component are două metode sunt declarate responsabile pentru componenta de desen. Așa cum sa discutat, chemările vopseaua este inițiată de sistemul de operare, în cazul în care există o nevoie de a aspira fereastra aplicației, sau o parte a acesteia. Cu toate acestea, este posibil să trebuiască să actualizați aspectul, ghidat de logica programului. De exemplu, afișează rezultatul calculului operațiunii, sau operarea cu rețeaua. Puteți schimba starea componentei (valoarea câmpurilor sale), dar sistemul de operare nu detectează schimbarea și nu declanșează o redesenare.
Pentru o inițializare software componentă retrasarea servește metoda repaint. Desigur, aceasta nu are un argument de tip Graphics. deoarece programatorul nu trebuie să creeze instanțe ale acestei clase (sau, mai degrabă, moștenitorii săi, pentru că Grafica - o clasă abstractă). Revopsiți metoda poate fi numit fără argumente. În acest caz, componenta va fi revopsite cât mai repede posibil. Puteți specifica un argument de tip lung - numărul de milisecunde. Sistemul inițiază o redesenare după timpul specificat. Puteți indica patru tipuri de int (x, y, lățime, înălțime), stabilind o zonă dreptunghiulară a componentei care trebuie să fie redesenat. În cele din urmă, aveți posibilitatea să specificați toți parametrii de 5 - și timpul de întârziere și regiunea pentru a vopsi.
În cazul în care redesenare a inițiat cererea, sistemul nu va determina metoda vopselei. și metoda de actualizare. El are deja un argument de tip Graphics, și implicit doar umple întreaga suprafață a culorii de fond componentă (fond de proprietate), și apoi apelează metoda de vopsea. De ce ai introduce această metodă suplimentară în cazul în care puteți suna imediat vopsea. Faptul este că, deoarece cererea inițiată redraw pentru componente complexe devine posibilă pentru a actualiza unele aspect de optimizare. De exemplu, în cazul în care schimbarea este apariția unui nou element grafic, este posibil să se evite a trebui să redesenare celelalte elemente - pentru a suprascrie metoda de actualizare și aplicarea acesteia în afișarea doar un element nou. În cazul în care componenta are o structură simplă, poate fi lăsat metoda de actualizare neschimbată.
desen containerului
Acum, când se cunoaște modul în care o componentă de desen, întorcându-se spre container. Pentru afișarea corectă trebuie să faci două lucruri. În primul rând, trage containerul în sine, pentru că el este moștenitorul componentelor, și, astfel, are o metodă de vopsea. care poate fi redefinit pentru a specifica apariția specială a unui astfel de recipient. În al doilea rând, inițiază desenul tuturor componentelor încorporate în ea.
Primul pas nu este diferită de componenta de redare convențională. În mod obișnuit, containerul nu conține nici un element de afișare specifice, deoarece zona sa de bază ocupată de componentele imbricate. Deci, să trecem la al doilea pas.
În cazul în care containerul este gol, înseamnă că are una sau mai multe componente. Acestea vor fi trase secvențial, în ordinea în care au fost adăugate. Nu este suficient pur și simplu pentru a determina ciclul de metoda de vopsea pentru fiecare componentă.
În primul rând, în cazul în care componenta nu este vizibilă (proprietate vizibilă este expus la fals), atunci, în mod evident, metoda de ea vopsea nu ar trebui să fie numit.
În al doilea rând, centrul de coordonate al componentei este situat în colțul din stânga sus al containerului său, iar containerul - în colțul din stânga sus al containerului său. Astfel, în timpul tranziției de la container pentru a trage desenul situată componenta aceasta trebuie să se schimbe (mutare) centrul sistemului de coordonate.
Apoi, clipul trebuie să fie instalat în conformitate cu dimensiunea componentei următoare. Este necesar să se stabilească valorile implicite pentru culoare și font, cu atât mai mult că componenta anterioară le poate schimba într-un mod imprevizibil.
Rezultatul este mai convenabil pentru a crea o nouă instanță a graficii pentru fiecare componentă. Pentru aceasta este metoda de a crea. care creează o copie a graficii. în care este posibil să treacă argumente (int x, int y, int latime, inaltime int). Ca rezultat, o nouă grafică se va deplasa coordonatele centrului la punctul (x, y), iar clipul este primit de la intersecția unui domeniu existent dreptunghi limitator (0, 0, lățime, înălțime) (în noile coordonate). a crea metoda creează o copie fără a modifica aceste setări.
O astfel de copie este convenabil pentru a produce într-un singur apel metoda de vopsea. în cazul în care este prea complicat algoritm este descris. După utilizarea unui astfel de obiect grafic trebuie să fie eliberați special - apelarea dispune (). Dacă aveți nevoie doar pentru a muta coordonatele punctului de referință, puteți utiliza metoda translate (int x, int y).
Astfel, metoda sa de recipient de vopsea în sine și toate componentele atașate în aceasta atrage. În cazul în care unele dintre ele, la rândul lor, sunt containere, atunci procesul continuă ierarhic mai adânc. Ca rezultat, intreaga interfata AWT, indiferent cât de greu poate fi, este fabricat din containere și componente din lemn, făcând începând cu partea de sus a containerului și de-a lungul ramurilor în curs de dezvoltare în profunzime pentru fiecare componentă vizibilă.
De interes deosebit este faptul că cel mai de sus container. De regulă, acesta este sistemul de operare al unei ferestre în același timp, este un container pentru componentă bazată pe Java. Acesta este sistemul de operare inițializează procesul de redare, este responsabil pentru plierea și desfășurare a ferestrei, redimensionare și așa mai departe. Pe partea Java pentru a lucra cu fereastra folosind clasa Window. care este succesorul de containere și este discutat mai jos.