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. TheGrafika
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 zagotavljaKomponenta
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 razredKomponenta
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.
Slika 1: Prebarvajte brskalnikApplet 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.
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. ThePoligon
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.
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.