Specialeffekter och spelutveckling
i Java(TM) - Hur man tar reda på textens dimensioner
(FontMetrics klassen)
av Anibal Wainstein
6.0.2 Hur man tar reda
på textens dimensioner (FontMetrics klassen)
Ibland
finns det situationer där du måste ta reda på
en texts bredd. Du kanske resonerar att om man har 40 bokstäver
i en text och man råkar veta att t.ex. tecknet "A"
är 8 pixlar brett, så är textbredden 40x8=320
pixlar? Fel... Detta resonemang fungerar om man använder
Courier fonten, men den kommer att misslyckas rejält
med de andra fonterna, eftersom dessa fonter är proportionella.
I proportionella fonter har bokstäverna olika bredd (som
t.ex. "i" och "m"). Dessutom är det
så att om du skriver att du vill ha en font med fontstorleken
12, så är det inte alltid det du får. För
stora fonter kommer detta att stämma dåligt. Lösningen
till alla dessa problem är att "mäta"
fonten med FontMetrics klassen. Du kan skapa en "fontmätare"
för en specifik font genom att skriva så här:
Font myfont=new Font("TimesRoman",Font.PLAIN,24);
Image myimage=createImage(200,100);
Graphics g=myimage.getFontMetrics();
g.setFont(font);
FontMetrics myfontmeasurer=bufferg.getFontMetrics();
Nu
kommer "myfontmeasurer" att ge information om fonten
"myfont". Tyvärr så måste man först
skapa ett Graphics-objekt och specifiera fonten där innan
vi kan skapa en FontMetrics-objekt. Efter det här kan
vi ta reda på en texts bredd och höjd genom att
skriva:
int width=myfontmeasurer.stringWidth("Hur bred är jag??");
int height=myfontmeasurer.stringHeight();
Med
metoderna stringWidth() och stringHeight() kan du ta reda
på en texts bredd och höjd. Observera att stringWidth()
behöver en sträng som argument, medan stringHeight()
tar fram en maximal höjd som en text kan ha. Vi sa förut
i avsnitt 2.1.4
att texter ritas ut från deras baslinje och uppåt.
Ibland kan det också vara nyttigt att veta höjden
på delen av texten som finns under och över baslinjen.
Detta gör man med metoderna getDescent() och getAscent().
int ascend=myfontmeasurer.getAscent();
int descend=myfontmeasurer.getDescent();
Allt
det här kan vara lite förvirrande, men följande
bild ger en beskrivning av hur metoderna fungerar:

Bilden
visar hur du kan mäta en text med de fyra FontMetrics-metoderna
stringWidth(), getHeight(), getAscent() och getDescent().
Dessa
metoder är allt du behöver kunna för att hantera
fonter inom specialeffektsutvecklingen.
Nästa sida >>
|