Programiranje

Uporaba predmeta Grafika

Različni dejavniki spodbujajo ljudi k pisanju programov. Verjamem, da za mnoge motivacija izvira iz želje po ustvarjanju grafike, manipuliranju s slikami ali po animiranju. Ne glede na to, ali želijo ustvariti arkadne igre, simulatorje letenja ali pakete CAD, razvijalci pogosto začnejo z učenjem risanja.

Grafično orodje v zbirki abstraktnih oken (ali AWT) programerju Java omogoča risanje preprostih geometrijskih oblik, tiskanje besedila in postavitev slik znotraj meja komponente, kot so okvir, plošča ali platno.

Ta stolpec je moj prvi na temo grafike. Osredotočil se bo na Grafika razred in njegove metode za risanje enostavnih geometrijskih oblik in bo predstavil postopek, s katerim pride do barvanja (in prebarvanja).

Začnimo pri osrednji fazi - Grafika razred.

Predavanje grafike

Bistveno je, da programerji razumejo Grafika pred poskusom risanja slik prek Jave. The Grafika class ponuja okvir za vse grafične operacije znotraj AWT. Igra dve različni, a sorodni vlogi. Prvič, to je grafični kontekst. Grafični kontekst je informacija, ki bo vplivala na risanje. To vključuje barve ozadja in ospredja, pisavo ter lokacijo in dimenzije izrezanega pravokotnika (območje komponente, v kateri je mogoče risati grafiko). Vključuje celo informacije o morebitnem cilju samih grafičnih operacij (zaslon ali slika). Drugič, Grafika class ponuja metode za risanje preprostih geometrijskih oblik, besedila in slik do cilja grafike. Vsi izhodi do cilja grafike se izvedejo s priklicem ene od teh metod.

Za risanje program zahteva veljaven grafični kontekst (ki ga predstavlja primerek Grafika razred). Zaradi Grafika class je abstraktni osnovni razred, zato ga ni mogoče neposredno ustvariti. Primerek praviloma ustvari komponenta in ga preda programu kot argument komponenti nadgradnja() in barva () metode. Ti dve metodi, skupaj z prebarvati () metode, so obravnavane v naslednjem poglavju.

Metode

Naslednje tri metode so vključene v prikaz grafike. Privzete različice vsake ponujajo razredi Komponenta. Metode nadgradnja() in barva () je treba na novo definirati za izvajanje želenih grafičnih operacij.

prebarvati ()

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 prebarvati () metoda zahteva, da se komponenta prebarva. Klicatelj lahko zahteva, da se prebarvanje izvede čim prej ali pa določi časovno obdobje v milisekundah. Če je določeno časovno obdobje, se postopek barvanja izvede pred iztekom časovnega obdobja. Klicatelj lahko tudi določi, da se prebarva samo del komponente. Ta tehnika je koristna, če je postopek barvanja dolgotrajen in je treba le del zaslona prebarvati. Koda v seznamu 1 prikazuje, kako prebarvati () metoda se lahko uporablja v programu.

logična mouseDown (dogodek e, int x, int y) {selected_object.move (x, y); prebarvati (); }

Seznam 1: Upravljalec dogodkov z miško

Koda v mouseDown () obravnavalec dogodkov ponovno izračuna položaj predmeta na zaslonu glede na položaj miške in pokliče prebarvati () način, ki označuje, da je treba zaslon čim prej prebarvati.

nadgradnja()

posodobitev javne praznine (grafika g)

The nadgradnja() metoda se pokliče kot odgovor na a prebarvati () ali kot odgovor na del komponente, ki je prvič odkrit ali prikazan. Edini argument metode je primer Grafika razred. The Grafika primerek velja samo v okviru nadgradnja() (in vse metode, ki jih pokliče), vendar se kmalu za tem zavrže nadgradnja() metoda vrne. Privzeta izvedba, ki jo zagotavlja Komponenta razred izbriše ozadje in pokliče barva () metoda (spodaj).

barva ()

javna prazna barva (grafika g)
The barva () metoda se prikliče iz nadgradnja() je odgovoren za dejansko risanje grafike. Edini argument metode je primer Grafika razred. Privzeta izvedba, ki jo zagotavlja razred Komponenta ne naredi ničesar. 

Kako se komponente prebarvajo

Za zmanjšanje časa, potrebnega za prebarvanje zaslona, ​​AWT uporabi dve bližnjici:

  • Prvič, AWT prebarva samo tiste sestavne dele, ki jih je treba prebarvati, bodisi zato, ker so bili odkriti bodisi ker so prosili za prebarvanje.

  • Drugič, če je bila komponenta pokrita in je odkrita, AWT prebarva samo tisti del komponente, ki je bil prej pokrit.

Applet na sliki 1 vam omogoča opazovanje tega procesa, ko se pojavi. Za trenutek prezrite besedilno območje na vrhu programčka in si oglejte samo barvni del zaslona. Z drugim oknom za trenutek pokrijte in nato odkrijte del programčka. Upoštevajte, da je prebarvan le tisti del zajetega programčka. Poleg tega se prebarvajo samo tiste komponente, ki so bile zajete, ne glede na njihov položaj v hierarhiji komponent. Z namerno uporabo različnih barv program naredi ta subtilen učinek opazen. Izvorna koda za to sliko je na voljo tukaj.

Slika 1: Prebarvajte brskalnik

Grafični koordinatni sistem

Metode, opisane v naslednjem razdelku, kot parametre vzamejo vrednosti, ki določajo, kako naj se nariše oblika. Na primer drawLine () metoda pričakuje štiri parametre. Prva dva parametra določata lokacijo začetka vrstice, zadnja dva parametra pa lokacijo konca vrstice. Natančne vrednosti, ki jih je treba posredovati drawLine () metode določa veljavni koordinatni sistem.

Koordinatni sistem je metoda za nedvoumno določanje lokacije točk v prostoru. V primeru AWT je ta prostor dvodimenzionalna površina, imenovana ravnina. Vsako lokacijo v ravnini lahko določite z dvema celo število, imenovano x in y koordinate. Vrednosti x in y koordinate se izračunajo glede na vodoravni in navpični odmik točke od začetka. V primeru AWT je izvor vedno točka v zgornjem levem kotu ravnine. Ima koordinatne vrednosti 0 (za x) in 0 (za y). Ilustracija na sliki 2 prikazuje dve točki - eno, ki se nahaja na izhodišču, in drugo na položaju sedem čez in pet navzdol od izvora.

Slika 2: Koordinatna ravnina

Grafični primitivi

Ta odsek uvaja metode za risanje črt, pravokotnikov, ovalov in lokov ter mnogokotnikov. Ker te metode delujejo le, če jih prikličete na veljaven Grafika na primer, se lahko uporabljajo samo v obsegu komponent nadgradnja() in barva () metode. Večina metod, ki sledijo, prihaja v parih. Ena od metod ( drawX () metoda) nariše samo obris določene oblike, druga metoda ( fillX () metoda) nariše izpolnjeno različico določene oblike.

črte

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

To je najpreprostejša od vseh grafičnih metod. Med določenimi začetnimi in končnimi točkami nariše ravno črto, široko en sam piksel. Nastala črta bo odrezana, da se prilega mejam trenutnega območja odreza. Črta bo narisana v trenutni barvi ospredja.

Applet na sliki 3 prikazuje drawLine () metoda v akciji. Izvorna koda je na voljo tukaj. Ta programček in programčki na slikah 4, 6 in 7 zahtevajo storitve dveh podpornih razredov: razreda NewCanvas in vmesnika Figure. Razred NewCanvas razširja razred Canvas in nudi posebno risalno površino za slike. Izvorna koda za razred NewCanvas je na voljo tukaj. Slikovni vmesnik določa metode, ki jih mora slika zagotoviti za uporabo z NewCanvas. Izvorna koda za vmesnik Slika je na voljo tukaj.

Slika 3: Prikaz risbe črte

pravokotniki
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, logično dvignjeno) void fill3DRect (int x, int y, int w, int h, logično postavljeno)

Vsaka od teh grafičnih metod kot parametre zahteva koordinate x in y, na katerih začne pravokotnik, ter širino in višino pravokotnika. Tako širina kot višina morata biti pozitivni celo število. Nastali pravokotnik bo odrezan, da bo ustrezal mejam trenutnega območja odreza. Pravokotnik bo narisan v trenutni barvi ospredja. Pravokotniki so v treh različnih slogih: navaden, z zaobljenimi vogali in z rahlim (a pogosto težko opaznim) tridimenzionalnim učinkom.

Grafične metode z zaobljenim pravokotnikom zahtevajo dva dodatna parametra, širino loka in višino loka, oba pa nadzorujeta zaokroževanje vogalov. Metode tridimenzionalnega pravokotnika zahtevajo dodaten parameter, ki označuje, ali naj bo pravokotnik potopljen ali dvignjen.

Applet na sliki 4 prikazuje te metode v akciji. Izvorna koda je na voljo tukaj.

Slika 4: Prikaz risbe pravokotnika

ovali in 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)

Vsaka od teh grafičnih metod kot parametre zahteva koordinate x in y središča ovalne ali loka ter širino in višino ovalne ali loka. Tako širina kot višina morata biti pozitivni celo število. Nastala oblika bo odrezana, da se prilega mejam trenutnega območja odreza. Oblika bo narisana v trenutni barvi ospredja.

Metode ločne grafike zahtevajo dva dodatna parametra, začetni kot in kot loka, za določitev začetka loka in velikosti loka v stopinjah (ne v radianih). Slika 5 prikazuje, kako so določeni koti.

Slika 5: Specifikacija kota

Applet na sliki 6 prikazuje te metode v akciji. Izvorna koda je na voljo tukaj.

Slika 6: Prikaz ovalne in obločne risbe

poligoni

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

Poligoni so oblike, oblikovane iz zaporedja odsekov črt. Vsaka od grafičnih metod mnogokotnikov kot parametre zahteva koordinate končnih točk odsekov črt, ki tvorijo poligon. Te končne točke lahko določite na enega od dveh načinov: kot dva vzporedna polja celih števil, ena predstavlja zaporedno x koordinate, druga pa zaporedje y koordinate; ali s primerkom Poligon razred. The Poligon razred zagotavlja metodo addPoint (), ki omogoča, da se definicija poligona sestavlja po točkah. Nastala oblika bo odrezana, da se prilega mejam trenutnega območja odreza.

Applet na sliki 7 prikazuje te metode v akciji. Izvorna koda je na voljo tukaj.

Slika 7: Prikaz risbe poligona

Zaključek

Verjeli ali ne, teh nekaj preprostih grafičnih primitivov, skupaj z vsem, kar smo pokrivali v zadnjih nekaj mesecih (AWT, obdelava dogodkov, opazovalci itd.), Je vse, kar potrebujete za pisanje kopice uporabnih aplikacij, od igre na CAD sisteme. Naslednji mesec bom sestavil vse te koščke in vam pokazal, kaj mislim.

Ostani na vezi.

Todd Sundsted piše programe, odkar so računalniki na voljo v namiznih modelih. Čeprav je bil Todd prvotno zainteresiran za izdelavo porazdeljenih objektnih aplikacij v jeziku C ++, se je Todd preselil v programski jezik Java, ko je Java postala očitna izbira za takšno stvar. Todd poleg pisanja ponuja storitve internetnega in spletnega svetovanja podjetjem na jugovzhodu ZDA. : END_BIO

Preberite več o tej temi

  • Razred Java Grafika API

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

  • Opazovalec in opazovalec //www.sun.com/javaworld/jw-10-1996/jw-10-howto.html
  • Učinkovit uporabniški vmesnik //www.sun.com/javaworld/jw-09-1996/jw-09-userint.html
  • Java in obdelava dogodkov //www.sun.com/javaworld/jw-08-1996/jw-08-event.html
  • Uvod v AWT //www.sun.com/javaworld/jw-07-1996/jw-07-awt.html

To zgodbo "Uporaba grafičnega predavanja" je prvotno objavil JavaWorld.

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