Hem E-böcker Specialeffekter och spelutveckling i Java textens dimensioner   

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 >>