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.
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.
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.
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 besedilaThe 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 pisavApplet 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.