Programmēšana

Grafikas klases izmantošana

Dažādi faktori iedvesmo cilvēkus rakstīt programmatūru. Es uzskatu, ka daudziem motivācija rodas no vēlmes radīt grafiku, manipulēt ar attēliem vai animēt. Neatkarīgi no tā, vai viņi vēlas izveidot arkādes spēles, lidojuma simulatorus vai CAD paketes, izstrādātāji bieži sāk mācīties zīmēt.

Grafikas rīkjosla Abstract Windowing Toolkit (vai AWT) ļauj Java programmētājam uzzīmēt vienkāršas ģeometriskas figūras, izdrukāt tekstu un izvietot attēlus komponenta, piemēram, rāmja, paneļa vai audekla robežās.

Šī sleja ir mana pirmā par grafikas tēmu. Tas koncentrēsies uz Grafika klase un tās metodes vienkāršu ģeometrisku figūru zīmēšanai, kā arī iepazīstinās ar krāsošanas (un pārkrāsošanas) procesu.

Sāksim centrālajā posmā - Grafika klasē.

Grafikas klase

Ir svarīgi, lai programmētāji saprastu Grafika klases, pirms viņi mēģina zīmēt attēlus, izmantojot Java. The Grafika klase nodrošina sistēmu visām grafikas operācijām AWT ietvaros. Tas spēlē divas dažādas, bet saistītas lomas. Pirmkārt, tas ir grafikas konteksts. Grafikas konteksts ir informācija, kas ietekmēs zīmēšanas darbības. Tas ietver fona un priekšplāna krāsas, fontu un izgrieztā taisnstūra atrašanās vietu un izmērus (tā komponenta reģionu, kurā var zīmēt grafiku). Tajā pat ir iekļauta informācija par pašu grafikas darbību galamērķi (ekrāns vai attēls). Otrkārt, Grafika klase sniedz metodes vienkāršu ģeometrisku formu, teksta un attēlu novilkšanai grafikas galamērķī. Visa izvade uz grafikas galamērķi notiek, izsaucot vienu no šīm metodēm.

Lai zīmētu, programmai ir nepieciešams derīgs grafiskais konteksts (ko attēlo Grafika klase). Tāpēc ka Grafika klase ir abstrakta bāzes klase, to nevar tieši novirzīt. Instanci parasti izveido komponents un nodod programmai kā argumentu komponentam Atjaunināt() un krāsot () metodes. Šīs divas metodes kopā ar pārkrāsot () metodi, ir aplūkoti nākamajā sadaļā.

Metodes

Šīs trīs metodes ir saistītas ar grafikas attēlošanu. Katra noklusējuma versijas nodrošina klases Komponents. Metodes Atjaunināt() un krāsot () būtu jādefinē no jauna, lai veiktu vēlamās grafikas darbības.

pārkrāsot ()

public void repaint () public void repaint (long tm) public void pārkrāsot (int x, int y, int w, int h) public void pārkrāsot (long tm, int x, int y, int w, int h)

The pārkrāsot () metode pieprasa komponenta pārkrāsošanu. Zvanītājs var pieprasīt, lai krāsošana notiktu pēc iespējas ātrāk, vai arī var norādīt laika periodu milisekundēs. Ja tiek noteikts laika periods, krāsošanas darbība notiks pirms laika perioda beigām. Zvanītājs var arī norādīt, ka pārkrāso tikai daļu komponenta. Šī tehnika ir noderīga, ja krāsošana ir laikietilpīga, un tikai daļa displeja ir jāpārkrāso. 1. saraksta kods parāda, kā pārkrāsot () metodi var izmantot programmā.

boolean mouseDown (notikums e, int x, int y) {selected_object.move (x, y); pārkrāsot (); }

1. saraksts: peles lejupvērstu notikumu apstrādātājs

Kods mouseDown () notikumu apstrādātājs pārrēķina objekta pozīciju displejā, pamatojoties uz peles pozīciju, un izsauc pārkrāsot () metode, kas norāda, ka displejs pēc iespējas ātrāk jāpārkrāso.

Atjaunināt()

public void update (grafika g)

The Atjaunināt() metodi sauc, atbildot uz a pārkrāsot () pieprasījums vai atbilde uz daļu no komponentes, kas tiek atklāts vai parādīts pirmo reizi. Metodes vienīgais arguments ir Grafika klasē. The Grafika instance ir derīga tikai Atjaunināt() metode (un visas metodes, ko tā sauc), bet tiek iznīcināta drīz pēc Atjaunināt() metode atgriež. Noklusējuma ieviešana, ko nodrošina Komponents klase izdzēš fonu un izsauc krāsot () metode (zemāk).

krāsot ()

public void paint (grafika g)
The krāsot () metodi izsauc no Atjaunināt() metodi un ir atbildīga par grafikas reālu zīmēšanu. Metodes vienīgais arguments ir Grafika klasē. Noklusējuma ieviešana, ko nodrošina klase Komponents neko nedara. 

Kā komponenti tiek pārkrāsoti

Lai samazinātu displeja pārkrāsošanai nepieciešamo laiku, AWT izmanto divus saīsnes:

  • Pirmkārt, AWT pārkrāso tikai tos komponentus, kurus nepieciešams pārkrāsot vai nu tāpēc, ka tie ir atsegti, vai arī tāpēc, ka lūdza tos pārkrāsot.

  • Otrkārt, ja kāds komponents bija pārklāts un tika atklāts, AWT pārkrāso tikai to komponenta daļu, kas iepriekš tika segta.

1. sīklietotne ļauj jums novērot šo procesu tā rašanās laikā. Uz brīdi ignorējiet teksta apgabalu sīklietotnes augšdaļā un skatieties tikai krāsainās displeja daļas. Izmantojot citu logu, īslaicīgi pārklājiet un pēc tam atklājiet sīklietotnes daļu. Ievērojiet, ka tiek pārkrāsota tikai tā sīklietotnes daļa, kas tika pārklāta. Turklāt tiek pārkrāsoti tikai tie komponenti, kas tika aptverti, neatkarīgi no to stāvokļa komponentu hierarhijā. Apzināti izmantojot dažādas krāsas, sīklietotne padara šo smalko efektu pamanāmu. Šī skaitļa avota kods ir pieejams šeit.

1. attēls: Pārkrāsojiet pārlūku

Grafikas koordinātu sistēma

Nākamajā sadaļā aprakstītās metodes kā parametrus ņem vērtības, kas nosaka formas zīmēšanas veidu. Piemēram, drawLine () metode paredz četrus parametrus. Pirmie divi parametri norāda līnijas sākuma vietu, bet pēdējie divi parametri norāda līnijas beigu vietu. Precīzas vērtības, kas jānodod drawLine () metodi nosaka spēkā esošā koordinātu sistēma.

Koordinātu sistēma ir metode, kā nepārprotami norādīt punktu atrašanās vietu telpā. AWT gadījumā šī telpa ir divdimensiju virsma, ko sauc par plakni. Katru vietu plaknē var norādīt ar diviem veseliem skaitļiem, ko sauc par x un y koordinātas. Vērtības x un y koordinātas tiek aprēķinātas, ņemot vērā punkta horizontālo un vertikālo nobīdi no sākuma. AWT gadījumā izcelsme vienmēr ir punkts plaknes augšējā kreisajā stūrī. Tam ir koordinātu vērtības 0 (par x) un 0 (par y). Attēlā 2. attēlā parādīti divi punkti - viens atrodas pie sākuma un otrs atrodas septiņās pozīcijās pāri un pieciem lejup no sākuma.

2. attēls: koordinātu plakne

Grafikas primitīvi

Šajā sadaļā ir ieviestas līniju, taisnstūru, ovālu un loku, kā arī daudzstūru zīmēšanas metodes. Tā kā šīs metodes darbojas tikai tad, ja tās izsauc uz derīgu Grafika piemēram, tos var izmantot tikai komponentu ietvaros Atjaunināt() un krāsot () metodes. Lielākā daļa sekojošo metožu notiek pa pāriem. Viena metode ( izdarītX () metode) uzzīmē tikai norādītās formas kontūru un otru metodi ( fillX () metode) uzzīmē aizpildītu norādītās formas versiju.

līnijas

void drawLine (int xBegin, int yBegin, int xEnd, int yEnd)

Šī ir vienkāršākā no visām grafikas metodēm. Starp norādītajiem sākuma un beigu punktiem tā velk taisnu līniju, viena pikseļa plata. Iegūtā līnija tiks apgriezta, lai ietilptu pašreizējā apgriešanas apgabala robežās. Līnija tiks novilkta pašreizējā priekšplāna krāsā.

Aplets 3. attēlā parāda drawLine () metode darbībā. Avota kods ir pieejams šeit. Šim sīklietotnei un 4., 6. un 7. attēlā esošajiem sīklietotnēm ir nepieciešami divu atbalsta klašu pakalpojumi: klase NewCanvas un saskarne Attēls. NewCanvas klase paplašina klases Canvas un nodrošina specializētu zīmēšanas virsmu figūrām. Klases NewCanvas avota kods ir pieejams šeit. Attēla saskarne nosaka metodes, kuras skaitlim jānodrošina, lai tās varētu izmantot ar NewCanvas. Attēla saskarnes avota kods ir pieejams šeit.

3. attēls: Līnijas zīmēšanas demonstrācija

taisnstūri
void drawRect (int x, int y, int w, int h) void fillRect (int x, int y, int w, int h) void drawRoundRect (int x, int y, int w, int h, int loka platums, int loka augstums ) void fillRoundRect (int x, int y, int w, int h, int arcWidth, int arcHeight) void draw3DRect (int x, int y, int w, int h, Boolean pacelts) void fill3DRect (int x, int y, int w, int h, būla vērtība paaugstināta)

Katrai no šīm grafikas metodēm kā parametri ir nepieciešamas x un y koordinātas, no kurām sākas taisnstūris, kā arī taisnstūra platums un augstums. Gan platumam, gan augstumam jābūt pozitīviem skaitļiem. Iegūtais taisnstūris tiks apgriezts, lai tas ietilptu pašreizējā izgriezuma apgabala robežās. Taisnstūris tiks uzzīmēts pašreizējā priekšplāna krāsā. Taisnstūri ir trīs dažādos stilos: gludi, ar noapaļotiem stūriem un ar nelielu (bet bieži vien grūti saskatāmu) trīsdimensiju efektu.

Noapaļota taisnstūra grafikas metodēm ir nepieciešami divi papildu parametri, loka platums un loka augstums, no kuriem abi kontrolē stūru noapaļošanu. Trīsdimensiju taisnstūra metodēm nepieciešams papildu parametrs, kas norāda, vai taisnstūris ir jānogremdē vai jāpaaugstina.

Aplets 4. attēlā parāda šīs metodes darbībā. Avota kods ir pieejams šeit.

4. attēls: taisnstūra zīmējuma demonstrēšana

ovāli un loki

void drawOval (int x, int y, int w, int h) void fillOval (int x, int y, int w, int h) void drawArc (int x, int y, int w, int h, int startAngle, int arcAngle ) void fillArc (int x, int y, int w, int h, int startAngle, int arcAngle)

Katrai no šīm grafikas metodēm kā parametri ir nepieciešamas ovāla vai loka centra x un y koordinātas, kā arī ovāla vai loka platums un augstums. Gan platumam, gan augstumam jābūt pozitīviem skaitļiem. Iegūtā forma tiks apgriezta, lai ietilptu pašreizējā apgriešanas apgabala robežās. Forma tiks uzzīmēta pašreizējā priekšplāna krāsā.

Loka grafikas metodēm ir nepieciešami divi papildu parametri - sākuma leņķis un loka leņķis, lai norādītu loka sākumu un loka lielumu grādos (nevis radiānos). 5. attēlā parādīts, kā tiek noteikti leņķi.

5. attēls: leņķa specifikācija

Aplets 6. attēlā parāda šīs metodes darbībā. Avota kods ir pieejams šeit.

6. attēls: Ovāla un loka zīmējuma demonstrēšana

daudzstūri

void drawPolygon (int xPoints [], int yPoints [], int nPoints) void drawPolygon (daudzstūris p) void fillPolygon (int xPoints [], int yPoints [], int nPoints) void fillPolygon (daudzstūris p)

Daudzstūri ir formas, kas veidotas no līniju segmentu secības. Katrai no daudzstūra grafikas metodēm kā parametri ir nepieciešamas daudzstūra veidojošo līniju segmentu galapunktu koordinātas. Šos galapunktus var norādīt vienā no diviem veidiem: kā divi paralēli veselu skaitļu masīvi, no kuriem viens apzīmē secīgos x koordinātas un otrs pārstāv secīgos y koordinātas; vai ar Daudzstūris klasē. The Daudzstūris klase nodrošina metodi addPoint (), kas ļauj daudzstūra definīciju apkopot pa punktiem. Iegūtā forma tiks apgriezta, lai ietilptu pašreizējā apgriešanas apgabala robežās.

Aplets 7. attēlā parāda šīs metodes darbībā. Avota kods ir pieejams šeit.

7. attēls: Daudzstūra zīmēšanas demonstrēšana

Secinājums

Ticiet vai nē, bet šie daži vienkāršie grafikas primitīvi kopā ar visu, ko esam apskatījuši pēdējos mēnešos (AWT, pasākumu apstrāde, novērotāji utt.), Ir viss, kas jums nepieciešams, lai uzrakstītu kaudzi noderīgu lietojumprogrammu, sākot no spēles uz CAD sistēmām. Nākamajā mēnesī es salikšu visus šos gabalus kopā un parādīšu, ko es domāju.

Sekojiet līdzi.

Kopš datori kļuva pieejami galddatoru modeļos, Tods Sundsteds raksta programmas. Lai arī sākotnēji Tods interesējās par izplatīto objektu lietojumprogrammu izveidi C ++, Tods pārcēlās uz Java programmēšanas valodu, kad Java kļuva par acīmredzamu izvēli šāda veida lietām. Papildus rakstīšanai Tods sniedz interneta un tīmekļa konsultāciju pakalpojumus uzņēmumiem ASV dienvidaustrumos. : END_BIO

Uzziniet vairāk par šo tēmu

  • Java klase Grafika API

    //java.sun.com/products/JDK/CurrentRelease/api/java.awt.Graphics.html

  • Novērotājs un novērojams //www.sun.com/javaworld/jw-10-1996/jw-10-howto.html
  • Efektīvā lietotāja saskarne //www.sun.com/javaworld/jw-09-1996/jw-09-userint.html
  • Java un notikumu apstrāde //www.sun.com/javaworld/jw-08-1996/jw-08-event.html
  • Ievads AWT //www.sun.com/javaworld/jw-07-1996/jw-07-awt.html

Šo stāstu "Grafikas klases izmantošana" sākotnēji publicēja JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found