Programiranje

Risanje besedila je enostavno s tremi razredi Java

Poleg metod za risanje primitivnih geometrijskih vrst, kot so črte in krogi, je Grafika razred ponuja metode za risanje besedila. V kombinaciji z Pisava in FontMetrics razredov, rezultat je nabor orodij, ki olajšajo risanje privlačnega besedila, kot bi bilo sicer. Ta stolpec bo zajemal vsakega od teh razredov in vam pokazal, kako jih uporabljati skupaj. Preden začnem, pa kratek pregled vloge Grafika razred je v redu.

Ocena

Da bi uporabili besedilne metode Grafika razred, razumevanje vloge Grafika zahteva se sam razred. Ta odsek predstavlja kratek pregled delovanja in delovanja Grafika razred. Bralci, ki iščejo temeljito pokritost, naj preberejo mojo oktobrsko kolumno, ki je na voljo tukaj.

The Grafika razred igra dve različni, a povezani vlogi v zbirki abstraktnih oken (AWT). Prvič, vzdržuje grafični kontekst, ki je sestavljen iz vseh informacij, ki bodo vplivale na rezultat grafične operacije. To vključuje barvo risbe, pisavo ter lokacijo in dimenzije pravokotnika za rezanje (območje, v katerem je mogoče risati grafiko). Še pomembneje pa je, da grafični kontekst določa cilj grafičnih operacij, o katerih se bo razpravljalo (cilji vključujejo komponente in slike).

Poleg vloge grafičnega konteksta, Grafika class ponuja metode za risanje preprostih geometrijskih oblik, besedila in slik do cilj grafike. Vse operacije, povezane z grafiko, na komponenti ali sliki se izvedejo po enem od teh načinov.

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 nato preda programu kot argument komponenti nadgradnja() in barva () metode. Ti dve metodi se imenujeta kot del običajnega cikla risanja, ki se začne v AWT.

The Grafika razred deluje skupaj z Pisava in FontMetrics razredi za zagotavljanje orodij, potrebnih za risanje besedila znotraj slike ali komponente. Začnimo s preučevanjem Grafika metode razreda za risanje besedila.

Razredna grafika

The Grafika class ponuja tri metode za risanje besedila na komponento ali sliko.

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

The drawString () metoda, prikazana spodaj, za parametre vzame primerek datoteke Vrvica razred, ki vsebuje besedilo za risanje, in dve celoštevilčni vrednosti, ki določata koordinate, na katerih naj se besedilo začne.

javna prazna barva (grafika g) {g.drawString ("abc", 25, 25); } 

Koda v zgornjem seznamu prikazuje drawString () metoda, ki se uporablja znotraj komponente barva () metoda. Koda v tem primeru črpa besedo "abc" na komponento, ki jo vsebuje barva () metoda. The x in y koordinate določajo lokacijo spodaj levo vogal okenca z besedilom. Slika 1 prikazuje, kako bi izgledal rezultat, če bi bila ta koda del ustreznega objekta komponente AWT.

Slika 1: Demonstracija drawString ()

void drawChars (podatki char [], odmik int, dolžina int, int x, int y)

The drawChars () Spodnja metoda za parametre vzame matriko znakov, ki vsebuje besedilo za risanje, celoštevilčno vrednost, ki označuje odmik v matriko, pri kateri se začne, celoštevilčna vrednost, ki označuje število znakov, ki jih je treba narisati, in dve celoštevilčni vrednosti, ki določata koordinate, kjer je besedilo bi se moral začeti.

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

Zgornja koda prikazuje drawChars () metoda, ki se uporablja znotraj komponente barva () metoda. Niz znakov je narisan v dveh delih. V prvem od obeh klicev na drawChars (), odmik Parameter pomeni, da se mora risba začeti s prvim znakom v matriki in s dolžina Parameter pomeni, da je treba v prvi vrstici narisati skupno pet znakov. Drugi od obeh klicev deluje na podoben način, vendar nariše zadnjih pet znakov v zaporedju znakov, ki se začne na položaju 25 pik pod prvim. Slika 2 prikazuje, kako bi izgledal rezultat, če bi bila ta koda del ustreznega objekta komponente AWT.

Slika 2: Demonstracija drawChars ()

void drawBytes (bajt [] podatki, odmik int, dolžina int, int x, int y)

Kot je prikazano spodaj, drawBytes () metoda kot parametre vzame matriko bajtov, ki vsebuje besedilo, ki ga je treba narisati, celoštevilčno vrednost, ki označuje odmik v matriko, pri kateri se začne, celoštevilčna vrednost, ki označuje število bajtov, ki jih je treba narisati, in dve celoštevilčni vrednosti, ki določata koordinate, kjer naj bo besedilo začetek.

javna void paint (grafika g) {byte [] 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); }

Zgornja koda prikazuje drawBytes () metoda, ki se uporablja znotraj komponente barva () metoda. Slika 3 prikazuje, kako bi izgledal rezultat, če je ta koda del ustrezne komponente komponente AWT.

Slika 3: Demonstracija drawBytes ()

Podpora za Unicode

Ena najbolj cenjenih funkcij Java je podpora mednarodnim skriptom prek Unicode. Žalostno je, da knjižnica razredov Java, ki je priložena različici 1.0 programskega jezika Java, ni popolnoma podpirala tega vidika jezika. Kaže pa, da so dobre novice pred vrati. Preliminarni API za internacionalizacijo (glej vire), ki ga ponuja SunSoft, pravi:

JDK 1.0 je bil omejen na prikaz samo znakov v podmnožici Latin-1 Unicode. Ta omejitev je odstranjena v JDK 1.1. Programi Java bodo zdaj lahko prikazali kateri koli znak Unicode, ki ga je mogoče upodobiti s pisavo gostitelja. Java ponuja majhno število vnaprej določenih "virtualnih" imen pisav in jih preslika v prave pisave, ki so na voljo na gostitelju. V JDK 1.0 se je vsako ime pisave Java preslikalo na točno eno pisavo gostitelja. V JDK 1.1 se lahko ime pisave Java preslika na vrsto gostiteljskih pisav. Serijo gostiteljskih pisav lahko izberete tako, da pokriva toliko nabora znakov Unicode, kot želite.

Umestitev besedila

Ker je besedilo za AWT le drugačna slika, lahko vrstico besedila postavimo kamor koli - tudi na drugo vrstico besedila. Učinek naključne namestitve pa ne bo nujno prijeten za oko. Da bi programerju pomagali pri ustvarjanju estetsko prijetnega besedila, opredelitev pisave vključuje smernice za postavitev vrstic in znakov. Te smernice bodo, če se bodo upoštevale, pomagale ustvariti prijeten rezultat.

Slika 4 vsebuje vrstico besedila, ki je označeno, da označuje značilnosti, o katerih bomo razpravljali.

Slika 4: Vrstica besedila

The y koordinatni parameter v metodah v prejšnjem oddelku določa lokacijo izhodišče vrstice besedila. The izhodišče je vrstica, na kateri počiva večina znakov v vrstici besedila (izjema so tisti znaki s padajočimi listi, kot sta "g" in "y"). Osnovna črta v resnici ni značilnost pisave, je pa referenčna točka, na katero se nanašajo vse druge značilnosti.

The vzpon je razdalja od osnovne črte do vrha večine znakov v pisavi. To je običajno višina velikih črk v pisavi in ​​znakov, kot sta "f" in "h". Vendar je ta številka le vodilo. Nekateri znaki v pisavi se lahko dejansko razširijo nad to razdaljo.

The spust je razdalja od osnovne črte do dna znakov v pisavi, ki imajo padajoče znake - znake, kot so "p", "g" in "y". Tako kot pri vzponu je tudi ta številka le vodilo. Nekateri znaki v pisavi se lahko dejansko razširijo pod to razdaljo.

The vodilni (izgovarja se "ledding") je prostor med spustom ene vrstice besedila in vzponom črte pod njim. Višina vrstice besedila (razdalja od osnovne črte ene vrstice besedila do osnovne črte besedila nad ali pod njo) vključuje ta dodaten presledek.

Poleg lastnosti, ki urejajo pisavo kot celoto, ima vsak znak v pisavi še vnaprej. Napredovanje določa, koliko slikovnih pik ločuje začetek znaka od začetka znaka na njegovi desni; skratka, to je širina znaka. Še enkrat, nekateri znaki v pisavi lahko dejansko presegajo to razdaljo.

S seštevanjem širine vseh znakov v vrstici besedila lahko izračunamo dolžino celotne vrstice besedila. The FontMetrics razred spodaj ponuja metodo, ki počne prav to in še več.

Razred FontMetrics

The FontMetrics razred ponuja preprost način za doseganje zgoraj opisanih značilnosti. Tukaj je getFontMetrics metoda v akciji:

javna void paint (Graphics g) {FontMetrics fm = g.getFontMetrics (); . . . } 

Zgornja koda prikazuje, kako je mogoče dobiti informacije o metriki pisave, ki opisujejo trenutno pisavo. The getFontMetrics () vrne primerek datoteke FontMetrics razred. The FontMetrics razred ponuja naslednje metode:

int getAscent ()

  • Vrne vzpon pisave.

int getDescent ()

  • Vrne spust pisave.

int getLeading ()

  • Vrne vodilno črko.

int getHeight ()

  • Vrne višino pisave. Višina je vsota vzpona, spusta in vodenja pisave.

int charWidth (int ch)

  • Vrne širino podanega znaka.

int charWidth (char ch)

  • Vrne širino podanega znaka.

int [] getWidths ()

  • Vrne celoštevilsko matriko, ki vsebuje širino prvih 256 znakov pisave.

Kot smo že omenili, znaki, ki sestavljajo pisavo, lahko včasih presegajo vzpon, spust in širino, o katerih poročajo zgornje metode. V primerih, ko se zahtevajo natančne vrednosti, so na voljo naslednje metode.

int getMaxAscent ()

  • Vrne največji vzpon pisave.

int getMaxDescent ()

  • Vrne največji spust pisave.

int getMaxAdvance ()

  • Vrne širino najširšega znaka v pisavi.

Naslednje metode nudijo informacije o širini, ki jo zavzame zaporedje znakov.

int stringWidth (niz str)

  • Vrne širino zaporedja znakov.

int bytesWidth (byte [] rgb, int offset, int length)

  • Vrne širino dolžina dolgo zaporedje bajtov, ki se začne pri odmik.

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

  • Vrne širino dolžina dolgo zaporedje znakov, ki se začne pri odmik.

Razredna pisava

The Pisava razred vsebuje informacije o pisavi. Nova pisava se ustvari z ustvarjanjem primerka datoteke Pisava razred z imenom, slogom in velikostjo točke.

Pisava f = nova pisava ("Dialog", Font.PLAIN, 12); 

Ko je pisava enkrat ustvarjena, jo lahko dodelite primerku datoteke Grafika predmet.

g.setFont (f); 

The Grafika object bo nato uporabil pisavo za vse nadaljnje grafične operacije, povezane z besedilom.

The Pisava class ponuja metode za pridobivanje informacij o pisavi, ko je ta že ustvarjena.

String getName ()

  • Vrne ime pisave.

String getFamily ()

  • Vrne ime pisave, določeno za platformo.

int getSize ()

  • Vrne velikost točke pisave.

int getStyle ()

  • Vrne slog pisave.

logična isBold ()

  • Vrne prav če je pisava krepka.

logična isItalic ()

  • Vrne prav če je pisava ležeča.

logična isPlain ()

  • Vrne prav če je pisava navadna.

String getName ()

  • Vrne ime pisave.

Predstavitev

Applet na sliki 5 prikazuje vrstico besedila z označbo, ki zadostuje za prikaz vrednosti povezanih meritev iz zgornjega razdelka. Debela črna črta leži na osnovni črti. Dve dodatni vrstici označujeta vzpon in spust zadevne pisave. Manjše navpične črte označujejo širino znakov. Trije spustni meniji omogočajo izbiro pisave, njenega sloga in velikosti točke.

Za ogled tega programčka potrebujete brskalnik, ki podpira Java.Slika 5: Interaktivni metrični brskalnik pisav

Applet uporablja Grafika, Pisava, in FontMetrics razredi obsežno. Njegov vir je na voljo tukaj.

Zaključek

Zdi se Grafika razred se je izkazal za zelo plodno podlago za raziskovanje. Odprava še ni končana. Naslednji mesec bom končal izlet v Ljubljano Grafika razred s stolpcem o metodah podpore za slike, v tem stolpcu pa se bo začel majhen niz o drugih temah, povezanih s slikami in AWT, vključno s proizvajalci slik in potrošniki slik.

Rad bi se zahvalil vsem, ki ste si vzeli čas, da mi pišete s svojimi komentarji, idejami in predlogi. Nadaljuj z dobrim delom.

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 je soavtor Java Language API SuperBible, ki je zdaj povsod v knjigarnah. Todd poleg pisanja ponuja storitve internetnega in spletnega svetovanja podjetjem na jugovzhodu ZDA.

Preberite več o tej temi

  • Razred Grafika API:

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

  • Razred Pisava API:

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

  • Razred FontMetrics API:

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

  • Uporabljati Grafika razred:

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

  • Internacionalizacijski API:

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

  • Vadnica za Java avtorice Mary Campione in Kathy Walrath:

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

To zgodbo "Risanje besedila je enostavno s tremi razredi Java" je prvotno objavil JavaWorld.

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