Programovanie

Používanie triedy Grafika

Pri písaní softvérových programov inšpirujú ľudí rôzne faktory. Verím, že pre mnohých motivácia pramení z túžby vytvárať grafiku, manipulovať s obrázkami alebo animovať. Či už chcú vytvárať arkádové hry, letecké simulátory alebo balíčky CAD, vývojári často začínajú tým, že sa naučia kresliť.

Sada grafických nástrojov v súbore nástrojov Abstract Windowing Toolkit (alebo AWT) umožňuje programátorovi Java kresliť jednoduché geometrické tvary, tlačiť text a umiestňovať obrázky do okrajov súčasti, ako je rám, panel alebo plátno.

Tento stĺpec je môj prvý na tému grafiky. Zameria sa na Grafika triedy a jej metódy na kreslenie jednoduchých geometrických tvarov a predstaví proces, pri ktorom dochádza k maľovaniu (a maľovaniu).

Začnime v strede fázy - Grafika trieda.

Trieda Grafika

Je nevyhnutné, aby programátori pochopili Grafika triedy skôr, ako sa pokúsia nakresliť obrázky cez Javu. The Grafika trieda poskytuje rámec pre všetky grafické operácie v rámci AWT. Hrá dve rôzne, ale navzájom súvisiace úlohy. Po prvé, je to grafický kontext. Grafický kontext sú informácie, ktoré ovplyvnia operácie kreslenia. Patria sem farby pozadia a popredia, písmo, umiestnenie a rozmery orezávacieho obdĺžnika (oblasť súčasti, v ktorej je možné kresliť grafiku). Zahŕňa dokonca informácie o konečnom cieli samotných grafických operácií (obrazovka alebo obrázok). Po druhé, Grafika trieda poskytuje metódy na kreslenie jednoduchých geometrických tvarov, textu a obrázkov do cieľového miesta grafiky. Celý výstup do grafického cieľa sa uskutočňuje vyvolaním jednej z týchto metód.

Na kreslenie program vyžaduje platný grafický kontext (predstavovaný inštanciou súboru Grafika trieda). Pretože Grafika trieda je abstraktná základná trieda, nemožno ju vytvoriť inštanciou priamo. Inštancia je zvyčajne vytvorená komponentom a odovzdaná programu ako argument komponentu aktualizácia () a farba () metódy. Tieto dve metódy spolu s premaľovať () v ďalšej časti.

Metódy

Nasledujúce tri metódy sú zapojené do zobrazovania grafiky. Predvolené verzie každej z nich poskytuje trieda Komponent. Metódy aktualizácia () a farba () by malo byť predefinované na vykonanie požadovaných grafických operácií.

premaľovať ()

public void repaint () public void repaint (long tm) public void repaint (int x, int y, int w, int h) public void repaint (long tm, int x, int y, int w, int h)

The premaľovať () metóda požaduje, aby bol komponent prefarbený. Volajúci môže požiadať, aby k prefarbeniu došlo čo najskôr, alebo môže určiť časové obdobie v milisekundách. Ak je zadané časové obdobie, operácia maľovania sa uskutoční pred uplynutím časového obdobia. Volajúci môže tiež určiť, že je potrebné vymaľovať iba časť komponentu. Táto technika je užitočná, ak je maľovanie náročné na čas a je potrebné vymaľovať iba časť displeja. Kód v zozname 1 ilustruje, ako premaľovať () metóda môže byť použitá v programe.

boolean mouseDown (Udalosť e, int x, int y) {selected_object.move (x, y); premaľovať (); }

Výpis 1: Obsluha udalosti kliknutím myši

Kód v mouseDown () obsluha udalosti prepočíta polohu objektu na displeji na základe polohy myši a zavolá premaľovať () metóda, ktorá naznačuje, že displej by mal byť čo najskôr prefarbený.

aktualizácia ()

aktualizácia verejnej neplatnosti (grafika g)

The aktualizácia () metóda sa volá ako odpoveď na a premaľovať () na žiadosť alebo ako odpoveď na časť komponentu, ktorá je odkrytá alebo zobrazená po prvýkrát. Jediným argumentom metódy je inštancia Grafika trieda. The Grafika inštancia je platná iba v kontexte aktualizácia () metóda (a všetky metódy, ktoré volá), ale bude zlikvidovaná čoskoro po aktualizácia () metóda sa vráti. Predvolená implementácia poskytovaná Komponent trieda vymaže pozadie a zavolá farba () metóda (nižšie).

farba ()

public void paint (grafika g)
The farba () metóda sa volá z aktualizácia () metódou a je zodpovedný za skutočné vykreslenie grafiky. Jediným argumentom metódy je inštancia Grafika trieda. Predvolená implementácia poskytnutá triedou Komponent Nerobí nič. 

Ako sa maľujú komponenty

Na skrátenie času potrebného na opätovné vymaľovanie displeja používa AWT dve skratky:

  • Po prvé, AWT vymaľuje iba tie komponenty, ktoré je potrebné vymaľovať, a to buď z dôvodu, že boli odkryté, alebo preto, že požiadali o ich vymaľovanie.

  • Po druhé, ak bol komponent zakrytý a je nekrytý, AWT premaľuje iba tú časť komponentu, ktorá bola predtým zakrytá.

Applet na obrázku 1 vám umožňuje pozorovať tento proces, ktorý sa deje. Na chvíľu ignorujte textovú oblasť v hornej časti appletu a sledujte iba farebnú časť displeja. Pomocou iného okna na chvíľu zakryte a potom odkryte časť appletu. Všimnite si, že je vymaľovaná iba časť appletu, ktorá bola zakrytá. Ďalej sú vymaľované iba tie komponenty, ktoré boli pokryté, bez ohľadu na ich pozíciu v hierarchii komponentov. Vďaka zámernému použitiu rôznych farieb applet zviditeľňuje tento jemný efekt. Zdrojový kód tohto obrázka je k dispozícii tu.

Obrázok 1: Premaľujte prehliadač

Grafický súradnicový systém

Metódy opísané v nasledujúcej časti berú ako parametre hodnoty, ktoré určujú, ako sa má tvar vykresliť. Napríklad drawLine () metóda očakáva štyri parametre. Prvé dva parametre určujú umiestnenie začiatku riadku a posledné dva parametre určujú umiestnenie konca riadku. Presné hodnoty, ktoré sa majú odovzdať drawLine () sú určené platným súradnicovým systémom.

Súradnicový systém je metóda na jednoznačné určenie polohy bodov v priestore. V prípade AWT je týmto priestorom dvojrozmerná plocha nazývaná rovina. Každé umiestnenie v rovine možno určiť dvoma celými číslami, ktoré sa nazývajú X a r súradnice. Hodnoty X a r súradnice sa počítajú z hľadiska príslušného horizontálneho a vertikálneho posunu bodu od začiatku. V prípade AWT je počiatkom vždy bod v ľavom hornom rohu roviny. Má súradnicové hodnoty 0 (pre X) a 0 (pre r). Ilustrácia na obrázku 2 zobrazuje dva body - jeden sa nachádza v počiatku a druhý v polohe sedem naprieč a päť dole od počiatku.

Obrázok 2: Súradnicová rovina

Grafické primitívy

Táto časť predstavuje spôsoby kreslenia čiar, obdĺžnikov, oválov a oblúkov a mnohouholníkov. Pretože tieto metódy fungujú, iba ak sú vyvolané na platnom Grafika môžu sa napríklad používať iba v rozsahu komponentov aktualizácia () a farba () metódy. Väčšina nasledujúcich metód prichádza v pároch. Jedna metóda ( drawX () metóda) nakreslí iba obrys určeného tvaru a druhá metóda (the fillX () metóda) nakreslí vyplnenú verziu určeného tvaru.

riadky

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

Toto je najjednoduchšia zo všetkých grafických metód. Medzi zadaným začiatočným a koncovým bodom kreslí priamku, široký jeden pixel. Výsledný riadok bude orezaný, aby sa zmestil do hraníc aktuálnej oblasti orezania. Čiara bude nakreslená v aktuálnej farbe popredia.

Applet na obrázku 3 demonštruje drawLine () metóda v akcii. Zdrojový kód je k dispozícii tu. Tento applet a applety na obrázkoch 4, 6 a 7 vyžadujú služby dvoch podporných tried: triedy NewCanvas a rozhrania Obrázok. Trieda NewCanvas rozširuje triedu Canvas a poskytuje špecializovanú plochu na kreslenie obrázkov. Zdrojový kód pre triedu NewCanvas je k dispozícii tu. Rozhranie Obrázok definuje metódy, ktoré musí obrázok poskytnúť, aby ho bolo možné použiť s NewCanvas. Zdrojový kód rozhrania Obrázok je k dispozícii tu.

Obrázok 3: Ukážka perokresby

obdĺžniky
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 arcWidth, int arcHeight ) 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 raised) void fill3DRect (int x, int y, int w, int h, boolean vystúpený)

Každá z týchto grafických metód vyžaduje ako parametre súradnice x a y, od ktorých sa má začať obdĺžnik, a šírka a výška obdĺžnika. Šírka aj výška musia byť kladné celé čísla. Výsledný obdĺžnik bude orezaný, aby sa zmestil do hraníc aktuálnej oblasti orezania. Obdĺžnik bude nakreslený v aktuálnej farbe popredia. Obdĺžniky majú tri rôzne štýly: obyčajný, so zaoblenými rohmi a s miernym (ale často neviditeľným) trojrozmerným efektom.

Grafické metódy zaobleného obdĺžnika vyžadujú dva ďalšie parametre, a to šírku oblúka a výšku oblúka, ktoré obidve ovládajú zaoblenie rohov. Metódy trojrozmerného obdĺžnika vyžadujú ďalší parameter, ktorý určuje, či má alebo nemá byť obdĺžnik zapustený alebo vyvýšený.

Aplet na obrázku 4 demonštruje tieto metódy v praxi. Zdrojový kód je k dispozícii tu.

Obrázok 4: Ukážka výkresu obdĺžnika

ovály a oblúky

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)

Každá z týchto grafických metód vyžaduje ako parametre súradnice x a y stredu oválu alebo oblúka a šírku a výšku oválu alebo oblúka. Šírka aj výška musia byť kladné celé čísla. Výsledný tvar bude orezaný, aby sa zmestil do hraníc aktuálnej oblasti orezania. Tvar bude nakreslený v aktuálnej farbe popredia.

Metódy oblúkovej grafiky vyžadujú na určenie začiatku oblúka a veľkosti oblúka v stupňoch (nie v radiánoch) dva ďalšie parametre, počiatočný uhol a uhol oblúka. Obrázok 5 zobrazuje, ako sú špecifikované uhly.

Obrázok 5: Špecifikácia uhla

Aplet na obrázku 6 demonštruje tieto metódy v praxi. Zdrojový kód je k dispozícii tu.

Obrázok 6: Ukážka oválneho a oblúkového výkresu

mnohouholníky

void drawPolygon (int xPoints [], int yPoints [], int nPoints) void drawPolygon (Polygon p) void fillPolygon (int xPoints [], int yPoints [], int nPoints) void fillPolygon (Polygon p)

Polygóny sú tvary vytvorené zo sledu úsečiek. Každá z polygónových grafických metód vyžaduje ako parametre súradnice koncových bodov úsečiek, ktoré tvoria polygón. Tieto koncové body je možné určiť jedným z dvoch spôsobov: ako dve paralelné polia celých čísel, jedno predstavujúce postupné X súradnice a ďalšie predstavujúce postupnosť r súradnice; alebo s inštanciou Polygón trieda. The Polygón triedy poskytuje metódu addPoint (), ktorý umožňuje zostaviť definíciu polygónu bod po bode. Výsledný tvar bude orezaný, aby sa zmestil do hraníc aktuálnej oblasti orezania.

Applet na obrázku 7 demonštruje tieto metódy v praxi. Zdrojový kód je k dispozícii tu.

Obrázok 7: Ukážka kreslenia mnohouholníka

Záver

Verte tomu alebo nie, týchto pár jednoduchých grafických primitívov v kombinácii so všetkým, čo sme za posledných pár mesiacov prebrali (AWT, spracovanie udalostí, pozorovatelia atď.), Sú všetko, čo potrebujete na napísanie hromady užitočných aplikácií, od hry do systémov CAD. Budúci mesiac dám všetky tieto kúsky dohromady a ukážem vám, čo tým myslím.

Zostaňte naladení.

Todd Sundsted píše programy od chvíle, keď boli počítače k ​​dispozícii v stolných modeloch. Aj keď sa Todd pôvodne zaujímal o budovanie aplikácií distribuovaných objektov v C ++, prešiel na programovací jazyk Java, keď sa Java stala jasnou voľbou pre tento druh vecí. Okrem písania Todd poskytuje internetové a webové poradenské služby spoločnostiam v juhovýchodných Spojených štátoch. : END_BIO

Získajte viac informácií o tejto téme

  • Trieda Java Grafika API

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

  • Pozorovateľ a pozorovateľný //www.sun.com/javaworld/jw-10-1996/jw-10-howto.html
  • Efektívne používateľské rozhranie //www.sun.com/javaworld/jw-09-1996/jw-09-userint.html
  • Java a spracovanie udalostí //www.sun.com/javaworld/jw-08-1996/jw-08-event.html
  • Úvod do AWT //www.sun.com/javaworld/jw-07-1996/jw-07-awt.html

Tento príbeh „Používanie triedy Grafika“ pôvodne publikoval server JavaWorld.

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