Programavimas

Trimis „Java“ klasėmis lengva piešti tekstą

Be primityvių geometrinių tipų, tokių kaip linijos ir apskritimai, piešimo metodų, Grafika klasėje pateikiami teksto piešimo metodai. Kartu su Šriftas ir „FontMetrics“ klasių, rezultatas yra įrankių rinkinys, kuris palengvina patrauklaus teksto piešimo darbą, nei gali būti kitaip. Šis stulpelis paeiliui apims kiekvieną iš šių klasių ir parodys, kaip jas naudoti kartu. Vis dėlto prieš pradedant, trumpai apžvelgiu Grafika klasė tvarkinga.

Apžvalga

Norint naudoti teksto metodus Grafika klasės supratimą apie Grafika reikalinga pati klasė. Šiame skyriuje pateikiama trumpa sistemos funkcijų ir veikimo apžvalga Grafika klasė. Skaitytojai, norintys išsamios informacijos, turėtų perskaityti mano spalio skiltį, kurią galite rasti čia.

Grafika klasė vaidina du skirtingus, tačiau susijusius vaidmenis abstrakčiame „langavimo“ įrankių rinkinyje (AWT). Pirma, jis palaiko grafikos kontekstą, kurį sudaro visa informacija, kuri turės įtakos grafikos operacijos rezultatams. Tai apima piešimo spalvą, šriftą, kirpimo stačiakampio vietą ir matmenis (regioną, kuriame galima piešti grafiką). Dar svarbiau tai, kad grafikos kontekstas apibrėžia numatomų aptarti grafikos operacijų paskirties vietą (paskirties vietos apima komponentus ir vaizdus).

Be grafikos konteksto vaidmens, Grafika klasėje pateikiami paprastų geometrinių figūrų, teksto ir vaizdų piešimo metodai į grafikos paskirties vieta. Visos su grafika susijusios komponento ar vaizdo operacijos atliekamos vienu iš šių metodų.

Norint piešti, programai reikalingas galiojantis grafikos kontekstas (kurį vaizduoja Grafika klasė). Nes Grafika klasė yra abstrakti pagrindinė klasė, jos negalima tiesiogiai ekspansuoti. Paprastai egzempliorius sukuriamas komponento ir perduodamas programai kaip argumentas komponentui atnaujinti () ir dažyti() metodai. Šie du metodai vadinami įprasto piešimo ciklo, pradėto AWT, dalimi.

Grafika klasė dirba kartu su Šriftas ir „FontMetrics“ klasės, kad suteiktų įrankius, būtinus tekstui piešti paveikslėlyje ar komponente. Pradėkime išnagrinėję Grafika klasės metodai tekstui piešti.

Klasės grafika

Grafika klasėje pateikiami trys metodai, kuriais piešiamas tekstas ant komponento ar vaizdo.

void drawString (String str, int x, int y)

Raištelis() metodas, parodytas žemiau, kaip parametrus ima Stygos klasė, kurioje yra piešiamas tekstas, ir dvi sveiko skaičiaus reikšmės, nurodančios koordinates, nuo kurių turėtų prasidėti tekstas.

public void paint (grafika g) {g.drawString ("abc", 25, 25); } 

Aukščiau pateiktame sąraše pateiktas kodas rodo Raištelis() komponento naudojamą metodą dažyti() metodas. Šiame pavyzdyje pateiktame kode komponentas, kuriame yra šis elementas, pritraukia žodį „abc“ dažyti() metodas. x ir y koordinatės nurodo kairėje apačioje pridedamo teksto laukelio kampas. 1 paveiksle parodyta, kaip rezultatas atrodytų, jei šis kodas būtų tinkamo AWT komponento objekto dalis.

1 paveikslas: „DrawString“ () demonstravimas

void drawChars (char [] duomenys, int offsetas, int ilgis, int x, int y)

drawChars () Toliau pateiktas metodas kaip parametrus ima simbolių masyvą, kuriame yra braižomas tekstas, sveiko skaičiaus reikšmė, rodanti poslinkį į masyvą, nuo kurio pradedama, sveiko skaičiaus reikšmė, nurodanti piešiamų simbolių skaičių, ir dvi sveiko skaičiaus reikšmės, nurodančios koordinates, kuriose tekstas turėtų prasidėti.

public void paint (grafika g) {char [] rgc = {'a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h', 'i', 'j'};

g.drawChars (rgc, 0, 5, 25, 25); g.drawChars (rgc, 5, 5, 25, 50); }

Aukščiau pateiktas kodas rodo drawChars () komponento naudojamą metodą dažyti() metodas. Simbolių masyvas yra sudarytas iš dviejų dalių. Pirmajame iš dviejų skambučių į drawChars (), kompensuoti parametras nurodo, kad brėžinys turėtų prasidėti pirmuoju masyvo simboliu ir ilgio parametras nurodo, kad iš viso pirmoje eilutėje turėtų būti nupiešti penki simboliai. Antrasis iš dviejų skambučių veikia panašiai, tačiau paskutiniai penki simbolių masyvo simboliai pradedami 25 pikseliais žemiau pirmojo. 2 paveiksle parodyta, kaip rezultatas atrodytų, jei šis kodas būtų tinkamo AWT komponento objekto dalis.

2 paveikslas: „DrawChars“ () demonstravimas

void drawBaitai (baitų [] duomenys, int poslinkis, int ilgis, int x, int y)

Kaip parodyta žemiau, drawBytes () metodas kaip parametrus ima baitų masyvą, kuriame yra braižomas tekstas, sveiko skaičiaus reikšmę, rodančią poslinkį į masyvą, nuo kurio pradedama, sveikojo skaičiaus reikšmę, nurodančią atkreiptinų baitų skaičių, ir dvi sveiko skaičiaus reikšmes, nurodančias koordinates, kur tekstas pradžia.

public void paint (grafika g) {baitas [] rgb = {'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't'};

g.drawBytes (rgb, 0, 5, 25, 25); g.drawBytes (rgb, 5, 5, 25, 50); }

Aukščiau pateiktas kodas rodo drawBytes () komponento naudojamą metodą dažyti() metodas. 3 paveiksle parodyta, kaip atrodytų rezultatas, jei šis kodas būtų tinkamo AWT komponento objekto dalis.

3 paveikslas: „DrawBytes“ () demonstravimas

„Unicode“ palaikymas

Viena populiariausių „Java“ funkcijų yra tarptautinių scenarijų palaikymas per „Unicode“. Gaila, kad „Java“ klasės biblioteka, teikiama su „Java“ programavimo kalbos 1.0 versija, ne visiškai palaikė šį kalbos aspektą. Tačiau panašu, kad geros naujienos jau visai šalia. Preliminari internacionalizavimo API (žr. Ištekliai), kurią galite gauti iš „SunSoft“, sako:

JDK 1.0 apsiribojo tik simbolių rodymu „Unicode“ lotynų-1 pogrupyje. Šis apribojimas pašalintas JDK 1.1. „Java“ programos dabar galės rodyti bet kurį „Unicode“ simbolį, kurį galima pateikti naudojant pagrindinį šriftą. „Java“ pateikia nedaug iš anksto nustatytų „virtualių“ šriftų pavadinimų ir susieja juos su realiais pagrindiniame kompiuteryje esančiais šriftais. JDK 1.0 versijoje kiekvienas „Java“ šrifto pavadinimas susiejamas su tiksliai vienu pagrindinio kompiuterio šriftu. JDK 1.1 versijoje „Java“ šrifto pavadinimas gali susieti su pagrindinio kompiuterio šriftų serija. Pagrindinių šriftų seriją galima pasirinkti, kad apimtų tiek „Unicode“ simbolių rinkinio, kiek norima.

Teksto talpinimas

Kadangi tekstas yra tik dar viena AWT figūra, teksto eilutė gali būti dedama bet kur - net ant kitos teksto eilutės. Tačiau atsitiktinio įdėjimo poveikis nebūtinai bus malonus akiai. Siekiant padėti programuotojui sukurti estetišką tekstą, šrifto apibrėžime pateikiamos eilučių ir simbolių išdėstymo gairės. Šios gairės, jei jų bus laikomasi, padės sukurti malonų rezultatą.

4 paveiksle yra teksto eilutė, kuri buvo pažymėta, kad būtų rodomos savybės, kurias ketiname aptarti.

4 paveikslas: teksto eilutė

y koordinatės parametras ankstesnio skyriaus metoduose nurodo bazinė linija teksto eilutės. bazinė linija yra eilutė, ant kurios remiasi dauguma teksto eilutės simbolių (išskyrus tuos simbolius, kurių palikuonys yra „g“ ir „y“). Bazinė linija iš tikrųjų nėra šrifto charakteristika, tačiau tai yra atskaitos taškas, kurį nurodo visos kitos charakteristikos.

pakilimas yra atstumas nuo bazinės linijos iki daugumos šrifto simbolių viršaus. Paprastai tai yra didžiųjų šrifto raidžių ir tokių simbolių kaip „f“ ir „h“ aukštis. Tačiau šis skaičius yra tik gairė. Kai kurie šrifto simboliai iš tikrųjų gali prasidėti virš šio atstumo.

nusileidimas yra atstumas nuo bazinės linijos iki šrifto simbolių, turinčių palikuonių, apačios - tokie simboliai kaip „p“, „g“ ir „y“. Kaip ir kilimo atveju, ši figūra yra tik gairė. Kai kurie šrifto simboliai iš tikrųjų gali prasidėti žemiau šio atstumo.

pirmaujantis (tariama „ledding“) yra tarpas tarp vienos teksto eilutės nusileidimo ir žemiau esančios linijos pakilimo. Teksto eilutės aukštis (atstumas nuo vienos teksto eilutės pradinės linijos iki teksto eilutės bazinės linijos virš arba žemiau) apima šią papildomą vietą.

Be šrifto, kaip visumos, charakteristikų, kiekvienas šrifto simbolis turi iš anksto. Pažanga nurodo, kiek pikselių skiria simbolio pradžią nuo simbolio pradžios dešinėje; trumpai tariant, tai simbolio plotis. Vėlgi, kai kurie šrifto simboliai gali iš tikrųjų prasidėti už šio atstumo.

Susumavus visų teksto eilutės simbolių pločius, galima apskaičiuoti visos teksto eilutės ilgį. „FontMetrics“ žemiau pateiktoje klasėje pateikiamas metodas, kuris daro tik tai ir dar daugiau.

Klasės „FontMetrics“

„FontMetrics“ klasė suteikia paprastą būdą susipažinti su anksčiau aptartomis savybėmis. Čia yra „getFontMetrics“ metodas veikiant:

public void paint (grafika g) {FontMetrics fm = g.getFontMetrics (); . . . } 

Aukščiau pateiktas kodas parodo, kaip galima gauti informaciją apie šrifto metriką, apibūdinančią dabartinį šriftą. „getFontMetrics“ () metodas grąžina „FontMetrics“ klasė. „FontMetrics“ klasėje pateikiami šie metodai:

int getAscent ()

  • Grąžina šrifto pakilimą.

int getDescent ()

  • Grąžina šrifto mažėjimą.

int getLeading ()

  • Grąžina šrifto priekį.

int getHeight ()

  • Grąžina šrifto aukštį. Aukštis yra šrifto pakilimo, nusileidimo ir pirmumo suma.

int charWidth (int ch)

  • Grąžina nurodyto simbolio plotį.

int charWidth (char ch)

  • Grąžina nurodyto simbolio plotį.

int [] getWidths ()

  • Pateikia sveiko skaičiaus masyvą, kuriame yra pirmųjų 256 šrifto ženklų plotis.

Kaip minėta pirmiau, šriftą sudarantys simboliai kartais gali viršyti aukščiau nurodytų metodų nurodytą kilimą, nusileidimą ir plotį. Tais atvejais, kai reikalingos tikslios vertės, pateikiami šie metodai.

int getMaxAscent ()

  • Grąžina maksimalų šrifto pakilimą.

int getMaxDescent ()

  • Pateikia maksimalų šrifto mažėjimą.

int getMaxAdvance ()

  • Grąžina plačiausio šrifto simbolio plotį.

Šie metodai suteikia informacijos apie plotį, kurį užima simbolių seka.

int stringWidth

  • Grąžina simbolių sekos plotį.

int bytesWidth (baitas [] rgb, int poslinkis, int ilgis)

  • Grąžina ilgio ilga baitų seka, prasidedanti kompensuoti.

int charsWidth (char [] rgc, int offset, int length)

  • Grąžina ilgio ilgos simbolių sekos, prasidedančios kompensuoti.

Klasės šriftas

Šriftas klasė kaupia informaciją apie šriftą. Naujas šriftas sukuriamas sukūrus Šriftas klasė su pavadinimu, stiliumi ir taško dydžiu.

Šriftas f = naujas šriftas („Dialog“, Font.PLAIN, 12); 

Sukūrus šriftą galima priskirti Grafika objektas.

g.setFont (f); 

Grafika Tada objektas naudos šriftą visoms tolesnėms su tekstu susijusioms grafikos operacijoms.

Šriftas klasėje pateikiami metodai, kaip gauti informacijos apie šriftą, kai jis bus sukurtas.

Eilutė „getName“ ()

  • Grąžina šrifto pavadinimą.

Eilutė „getFamily“ ()

  • Grąžina platformai būdingą šrifto pavadinimą.

int getSize ()

  • Grąžina šrifto taško dydį.

int getStyle ()

  • Grąžina šrifto stilių.

loginis yra pusjuodis ()

  • Grįžta tiesa jei šriftas paryškintas.

loginis yra italų ()

  • Grįžta tiesa jei šriftas yra kursyvas.

loginis isPlain ()

  • Grįžta tiesa jei šriftas yra paprastas.

Eilutė „getName“ ()

  • Grąžina šrifto pavadinimą.

Demonstracija

5 paveiksle esanti programėlė rodo teksto eilutę su žymėjimu, kurio pakanka nurodyti aukščiau esančiame skyriuje pateiktos susietos metrikos vertėms. Stora juoda linija sėdi ties pagrindo linija. Dvi papildomos eilutės nurodo atitinkamo šrifto pakilimą ir nusileidimą. Mažesnės vertikalios linijos nurodo simbolių pločius. Trys išskleidžiami meniu leidžia pasirinkti šriftą, jo stilių ir taško dydį.

Jums reikia „Java“ palaikančios naršyklės, kad galėtumėte peržiūrėti šią programėlę.5 paveikslas: interaktyvi šrifto metrikos naršyklė

Programėlė naudoja Grafika, Šriftasir „FontMetrics“ klasės. Jos šaltinį galite rasti čia.

Išvada

Atrodo Grafika klasė pasirodė esanti labai derlinga dirva tyrinėjimams. O ekspedicija dar nebaigta. Kitą mėnesį baigsiu savo ekskursiją į Grafika klasę su stulpeliu apie savo atvaizdų palaikymo metodus, ir tame stulpelyje prasidės nedidelė serija kitomis temomis, susijusiomis su vaizdais ir AWT, įskaitant vaizdo gamintojus ir vartotojų vartotojus.

Norėčiau padėkoti jums visiems, kurie skyrėte laiko man parašyti su savo komentarais, idėjomis ir pasiūlymais. Tęsk gerą darbą.

Toddas Sundstedas rašė programas nuo tada, kai kompiuteriai tapo prieinami darbalaukio modeliuose. Nors Toddas iš pradžių domėjosi paskirstytų objektų programų kūrimu C ++, Toddas persikėlė į „Java“ programavimo kalbą, kai „Java“ tapo akivaizdžiu pasirinkimu tokiems dalykams. Toddas yra „Java“ kalbos API „SuperBible“ bendraautorius, dabar knygynuose visur. Be rašymo, Toddas teikia interneto ir žiniatinklio konsultavimo paslaugas JAV pietryčių įmonėms.

Sužinokite daugiau apie šią temą

  • Klasė Grafika API:

    //www.javasoft.com/products/JDK/CurrentRelease/api/java.awt.Graphics.html

  • Klasė Šriftas API:

    //www.javasoft.com/products/JDK/CurrentRelease/api/java.awt.Graphics.html

  • Klasė „FontMetrics“ API:

    //www.javasoft.com/products/JDK/CurrentRelease/api/java.awt.Graphics.html

  • Naudojant Grafika klasė:

    //www.javaworld.com/javaworld/jw-11-1996/jw-11-howto.html

  • Tarptautinimo API:

    //www.javasoft.com/products/JDK/1.1/docs/guide/intl/index.html

  • „Java“ pamoka pateikė Mary Campione ir Kathy Walrath:

    //www.javasoft.com/books/Series/Tutorial/index.html

Šią istoriją „Papiešti tekstą lengva naudojant tris„ Java “klases“ iš pradžių paskelbė „JavaWorld“.