Programmēšana

Izmantojot trīs Java klases, tekstu ir viegli izdarīt

Papildus primitīvu ģeometrisko tipu, piemēram, līniju un apļu, zīmēšanas metodēm Grafika klase sniedz metodes teksta zīmēšanai. Ja to apvieno ar Fonts un FontMetrics klases, rezultāts ir rīku kopums, kas pievilcīga teksta zīmēšanas darbu padara daudz vieglāku, nekā tas varētu būt citādi. Šajā slejā pēc kārtas tiks aplūkotas visas šīs klases un parādīts, kā tās izmantot kopā. Pirms es sāku, īss pārskats par Grafika klase ir kārtībā.

Recenzija

Lai izmantotu programmas teksta metodes Grafika klase, izpratne par Grafika klase ir nepieciešama. Šajā sadaļā sniegts īss pārskats par sistēmas funkcijām un darbību Grafika klasē. Lasītājiem, kuri meklē pilnīgu pārklājumu, vajadzētu izlasīt manu oktobra sleju, kas pieejama šeit.

The Grafika klasei ir divas dažādas, bet saistītas lomas abstraktā vēja rīku komplektā (AWT). Pirmkārt, tas uztur grafikas kontekstu, kas sastāv no visas informācijas, kas ietekmēs grafikas darbības iznākumu. Tas ietver zīmēšanas krāsu, fontu un izgrieztā taisnstūra atrašanās vietu un izmērus (reģionu, kurā var zīmēt grafiku). Vēl svarīgāk ir tas, ka grafikas konteksts nosaka galamērķi grafiskajām darbībām, kuras tiks apspriestas (galamērķos ietilpst komponenti un attēli).

Papildus grafiskā konteksta lomai, Grafika klase sniedz metodes vienkāršu ģeometrisku figūru, teksta un attēlu zīmēšanai uz grafikas galamērķis. Visas ar grafiku saistītās operācijas komponentā vai attēlā notiek, izmantojot kādu 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. Eksemplāru parasti izveido komponents un pēc tam nodod programmai kā argumentu komponentam Atjaunināt() un krāsot () metodes. Šīs divas metodes tiek izsauktas kā daļa no parastā zīmēšanas cikla, kas uzsākts AWT.

The Grafika klase strādā kopā ar Fonts un FontMetrics klases, lai nodrošinātu rīkus, kas nepieciešami teksta zīmēšanai attēlā vai komponentā. Sāksim, pārbaudot Grafika klases metodes teksta zīmēšanai.

Klases grafika

The Grafika klase piedāvā trīs metodes, kas zīmē tekstu uz komponenta vai attēla.

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

The drawString () metode, kas parādīta zemāk, kā parametrus izmanto Stīga klase, kas satur zīmējamo tekstu, un divas veselā skaitļa vērtības, kas norāda koordinātas, no kurām jāsākas tekstam.

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

Iepriekš esošajā sarakstā redzamais kods parāda drawString () metode, kas tiek izmantota komponentu ietvaros krāsot () metodi. Šajā piemērā iekļautais kods zīmē vārdu "abc" uz komponentu, kas to satur krāsot () metodi. The x un y koordinātas norāda atrašanās vietu apakšējā kreisajā pusē pievienojošā tekstlodziņa stūris. 1. attēlā parādīts, kā rezultāts izskatītos, ja šis kods būtu piemērota AWT komponenta objekta sastāvdaļa.

1. attēls: DrawString () demonstrācija

void drawChars (char [] dati, int nobīde, int garums, int x, int y)

The drawChars () Šī metode kā parametrus ņem rakstzīmju masīvu, kas satur zīmējamo tekstu, vesela skaitļa vērtību, kas norāda nobīdi masīvā, ar kuru jāsāk, vesela skaitļa vērtību, kas norāda zīmējamo rakstzīmju skaitu, un divas vesela skaitļa vērtības, kas norāda koordinātas, kur teksts vajadzētu sākt.

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); }

Iepriekš redzamais kods parāda drawChars () metode, kas tiek izmantota komponentu ietvaros krāsot () metodi. Rakstzīmju masīvs ir uzzīmēts divās daļās. Pirmajā no diviem zvaniem uz drawChars (), kompensēt parametrs norāda, ka zīmējums jāsāk ar masīva pirmo rakstzīmi un garums parametrs norāda, ka pirmajā rindā kopā vajadzētu uzzīmēt piecas rakstzīmes. Otrais no abiem zvaniem darbojas līdzīgā veidā, bet pēdējās piecas rakstzīmju masīva zīmēšanas zīmes sākas pozīcijā, kas atrodas 25 pikseļus zem pirmās. 2. attēlā parādīts, kā rezultāts izskatītos, ja šis kods būtu piemērota AWT komponenta objekta sastāvdaļa.

2. attēls: drawChars () demonstrācija

void drawBytes (baitu [] dati, int nobīde, int garums, int x, int y)

Kā parādīts zemāk, drawBytes () metode kā parametrus ņem baitu masīvu, kas satur zīmējamo tekstu, vesela skaitļa vērtību, kas norāda nobīdi masīvā, ar kuru jāsāk, vesela skaitļa vērtību, kas norāda zīmējamo baitu skaitu, un divas vesela skaitļa vērtības, kas norāda koordinātas, kur tekstam jābūt sākt.

public void paint (Grafika g) {baits [] 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); }

Iepriekš minētais kods parāda drawBytes () metode, kas tiek izmantota komponentu ietvaros krāsot () metodi. 3. attēlā parādīts, kā rezultāts izskatās, ja šis kods atrodas piemērota AWT komponenta objektā.

3. attēls: DrawBytes () demonstrācija

Unicode atbalsts

Viena no populārākajām Java funkcijām ir starptautisko skriptu atbalsts, izmantojot Unicode. Žēl, ka Java klases bibliotēka, kas piegādāta ar Java programmēšanas valodas 1.0 versiju, pilnībā neatbalstīja šo valodas aspektu. Tomēr šķiet, ka labās ziņas ir tepat blakus. Provizoriskā Internacionalizācijas API (skat. Resursus), kas pieejama SunSoft, saka:

JDK 1.0 aprobežojās tikai ar simbolu parādīšanu Unicode apakškopā Latin-1. Šis ierobežojums ir noņemts JDK 1.1. Java programmas tagad varēs parādīt jebkuru Unicode rakstzīmi, ko var atveidot ar resursdatora fontu. Java nodrošina nelielu skaitu iepriekš definētu "virtuālo" fontu nosaukumu un tos kartē ar reāliem foniem, kas pieejami resursdatorā. JDK 1.0 versijā katrs Java fonta nosaukums tika kartēts tieši ar vienu resursdatora fontu. Programmā JDK 1.1 Java fonta nosaukums var piesaistīt resursdatora fontu sērijai. Saimniekfontu sēriju var izvēlēties, lai aptvertu vēlamo Unicode rakstzīmju kopu.

Teksta izvietojums

Tā kā teksts ir tikai cita veida skaitlis AWT, teksta rindiņu var novietot jebkur - pat virs citas teksta rindas. Tomēr nejauša izvietojuma ietekme acīmredzami nebūs patīkama. Lai palīdzētu programmētājam radīt estētiski pievilcīgu tekstu, fonta definīcija ietver vadlīnijas līniju un rakstzīmju izvietojumam. Šīs vadlīnijas, ja tās tiks ievērotas, palīdzēs radīt patīkamu rezultātu.

4. attēlā ir iezīmēta teksta rindiņa, lai norādītu raksturīgās iezīmes, kuras mēs gatavojamies apspriest.

4. attēls: teksta rindiņa

The y koordinātu parametrs iepriekšējās sadaļas metodēs norāda bāzes līniju teksta rindiņas. The bāzes līniju ir līnija, uz kuras atrodas lielākā daļa rakstzīmju teksta rindā (izņemot rakstzīmes ar pēcnācējiem, piemēram, "g" un "y"). Bāzes līnija patiesībā nav fonta pazīme, bet ir atskaites punkts, uz kuru attiecas visi pārējie raksturlielumi.

The pacelšanās ir attālums no bāzes līnijas līdz lielākajai daļai fonta rakstzīmju. Parasti tas ir fonta lielo burtu un tādu rakstzīmju kā "f" un "h" augstums. Šis skaitlis tomēr ir tikai vadlīnijas. Dažas burta rakstzīmes var pārsniegt šo attālumu.

The nolaišanās ir attālums no bāzes līnijas līdz burtu apakšdaļai šriftā, kuriem ir pēcnācēji - tādas rakstzīmes kā "p", "g" un "y". Tāpat kā ar pacelšanos, arī šis skaitlis ir tikai vadlīnijas. Dažas burta rakstzīmes var būt zem šī attāluma.

The vadošais (izrunā "ledding") ir vietas daudzums starp vienas teksta rindas nolaišanos un līnijas pacelšanos zem tā. Teksta rindas augstums (attālums no vienas teksta līnijas bāzes līnijas līdz teksta līnijas bāzes līnijai virs vai zem tā) ietver šo papildu vietu.

Papildus rakstzīmēm, kas regulē fontu kopumā, katram fonta rakstzīmei ir iepriekš. Virziens norāda, cik pikseļu atdala rakstzīmes sākumu no rakstzīmes sākuma pa labi; īsi sakot, tas ir rakstzīmes platums. Atkal dažas fonta rakstzīmes faktiski var pārsniegt šo attālumu.

Saskaitot visu rakstzīmju platumus teksta rindā, var aprēķināt visas teksta rindas garumu. The FontMetrics klase zemāk piedāvā metodi, kas veic tieši to, un vēl vairāk.

Klase FontMetrics

The FontMetrics klase nodrošina vienkāršu veidu, kā iegūt iepriekš aprakstītās īpašības. Šeit ir getFontMetrics metode darbībā:

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

Iepriekš minētais kods parāda, kā var iegūt informāciju par fontu metriku, kas apraksta pašreizējo fontu. The getFontMetrics () metode atgriež FontMetrics klasē. The FontMetrics klase nodrošina šādas metodes:

int getAscent ()

  • Atgriež fonta pieaugumu.

int getDescent ()

  • Atgriež fonta nolaišanos.

int getLeading ()

  • Atgriež fonta priekšdaļu.

int getHeight ()

  • Atgriež fonta augstumu. Augstums ir fonta pacelšanās, nolaišanās un virziena summa.

int charWidth (int ch)

  • Atgriež norādītās rakstzīmes platumu.

int charWidth (char ch)

  • Atgriež norādītās rakstzīmes platumu.

int [] getWidths ()

  • Atgriež vesela skaitļa masīvu, kas satur fonta pirmo 256 rakstzīmju platumu.

Kā minēts iepriekš, rakstzīmes, kas veido fontu, dažkārt var pārsniegt augšupejošo, nolaižamo un platumu, par kuru ziņo iepriekš minētās metodes. Gadījumos, kad ir nepieciešamas precīzas vērtības, ir norādītas šādas metodes.

int getMaxAscent ()

  • Atgriež fonta maksimālo kāpumu.

int getMaxDescent ()

  • Atgriež maksimālo fonta nolaišanos.

int getMaxAdvance ()

  • Atgriež fonta platākās rakstzīmes platumu.

Šīs metodes sniedz informāciju par rakstzīmju secības aizņemto platumu.

int stringWidth (virknes str)

  • Atgriež rakstzīmju secības platumu.

int bytesWidth (baits [] rgb, int nobīde, int garums)

  • Atgriež garums gara baitu secība, kas sākas plkst kompensēt.

int charsWidth (char [] rgc, int nobīde, int garums)

  • Atgriež garums gara rakstzīmju secība, kas sākas plkst kompensēt.

Klases fonts

The Fonts klase apkopo informāciju par fontu. Jauns fonts tiek izveidots, izveidojot Fonts klase ar nosaukumu, stilu un punktu lielumu.

Fonts f = jauns fonts ("Dialog", Font.PLAIN, 12); 

Pēc izveides fontu var piešķirt Grafika objekts.

g.setFont (f); 

The Grafika Tad objekts izmantos fontu visām turpmākajām ar tekstu saistītajām grafikas operācijām.

The Fonts klase piedāvā metodes, kā iegūt informāciju par fontu, tiklīdz tas ir izveidots.

Virkne getName ()

  • Atgriež fonta nosaukumu.

Virkne getFamily ()

  • Atgriež fonta nosaukumu platformai.

int getSize ()

  • Atgriež fonta punkta lielumu.

int getStyle ()

  • Atgriež fonta stilu.

boolean isBold ()

  • Atgriežas taisnība ja fonts ir treknrakstā.

būla isItalic ()

  • Atgriežas taisnība ja fonts ir kursīvs.

boolean isPlain ()

  • Atgriežas taisnība ja fonts ir vienkāršs.

Virkne getName ()

  • Atgriež fonta nosaukumu.

Demonstrācija

Aplets 5. attēlā parāda teksta rindiņu ar atzīmi, kas ir pietiekama, lai norādītu saistītās metrikas vērtības no iepriekšējās sadaļas. Bāzes līnijā atrodas bieza melna līnija. Divas papildu rindas norāda uz attiecīgā fonta pacelšanos un nolaišanos. Mazākas vertikālās līnijas norāda rakstzīmju platumu. Trīs nolaižamās izvēlnes ļauj izvēlēties fontu, tā stilu un punktu lielumu.

Lai apskatītu šo sīklietotni, jums ir nepieciešama Java iespējota pārlūkprogramma.5. attēls: interaktīvs fontu metrikas pārlūks

Sīklietotne izmanto Grafika, Fonts, un FontMetrics klases plaši. Tās avots ir pieejams šeit.

Secinājums

Šķiet, ka Grafika klase ir izrādījusies ļoti auglīga augsne izpētei. Un ekspedīcija vēl nav pabeigta. Nākamajā mēnesī es beigšu savu ekskursiju uz Grafika klase ar kolonnu par savām attēlu atbalsta metodēm, un šī kolonna sāks nelielu sēriju par citām tēmām, kas saistītas ar attēliem un AWT, ieskaitot attēlu ražotājus un attēlu patērētājus.

Es gribētu pateikties jums visiem, kas esat prasījuši laiku, lai man uzrakstītu komentārus, idejas un ieteikumus. Tā turpināt.

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. Tods ir Java valodas API SuperBible līdzautors, tagad grāmatnīcās visur. Papildus rakstīšanai Tods sniedz interneta un tīmekļa konsultāciju pakalpojumus uzņēmumiem ASV dienvidaustrumos.

Uzziniet vairāk par šo tēmu

  • Klase Grafika API:

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

  • Klase Fonts API:

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

  • Klase FontMetrics API:

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

  • Izmantojot Grafika klase:

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

  • Internacionalizācijas API:

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

  • Java apmācība autori Mary Campione un Kathy Walrath:

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

Šo stāstu "Teksta zīmēšana ir vienkārša, izmantojot trīs Java klases" sākotnēji publicēja JavaWorld.

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