Tekst

Obsługa prostych tekstów podzielona pomiędzy klasy Graphics, Font i FontMetrics.

Pisanie tekstu

W przypadku pisania kodu wyświetlającego tekst dobrze jest sprawdzić, czy nie można użyć tekstowych obiektów typu Component jak Label, Label, TextField, lub TextArea. Jeśli te obikety są niezadowalające, można użyć metod klasy Graphics drawBytes(), drawChars(), lub drawString().

Poniżej przedstawiono linię kodu służącą do wyświetlenia łańcucha tekstowego na ekranie:

g.drawString("Hello World!", x, y);
Parametry x i y są wartościami typu integer i określają pozycję lewego dolnego rogu tekstu. Dokładnie rzecz biorąc, współrzędna y określa linię bazową (baseline) tekstu.

Poniższy rysunek pokazuje linię bazową, linię dolną (descender line) -- np dla litery y

Poniższy aplet pokazuje, co się może wydarzyć przy niezbyt uważnym pozycjonowaniu tekstu:

Górny łańcuch jest prawdopodobnie odcięty ponieważ argument y jest równy 5, co zostawia tylko 5 pixeli nad linią bazową łańcucha. Łańcuch śrdokowy jest prawidłowo wyświetlony (chyba że przyjęto domyślnie b. duży font). Także większość liter dolnwgo łańcucha widać w całości oprócz tych które zaczynają się już na linii dolnej. (Tutaj jest kod tego apletu.)

Informacje o czcionkach : FontMetrics

Metody getFont(), setFont(), oraz getFontMetrics() zwracają i ustalają bieżącą czcionkę oraz zwracają obiekt typu FontMetrics odpowiadający aktywnej czcionce.
Font font = g.getFont();
FontMetrics fontMetrics = g.getFontMetrics();

Poniższy rysunek przedstawia zależności pomiędzy liniami bazowymi tekstu i metodami obiektu FontMetrics:

Poniżej przedstawiono zestawienie metod klasy FontMetrics, które zwracają informacje o wymiarach pionowych tekstu:

getAscent(), getMaxAscent()
Metoda getAscent()zwraca liczbę pixeli pomiędzy linią górną i linią bazową. Zazwyczaj, linia górna jest reprezentuje wysokość typowych dużych liter. Jest to wielkość wystarczająca dla swobodnego umieszczenia większości liter, może z wyjątkiem dużych liter a górnymi akcentami (Ś,Ć itp). Wtedy trzeba skorzystać z metody getMaxAscent().

getDescent(), getMaxDescent()
Metoda getDescent() zwraca liczbę pixeli pomiędzy linią bazową a linią dolną. W większości przypadków czcionki nie przekraczają linii dolnej w swym najniższym punkcie. Jeżli nie, to użycie metody getMaxDescent() pozwala na uzyskanie odpowiedniego dystansu dla każdej czcionki.

getHeight()
Zwraca liczbę pixeli między dwoma sąsiednimi liniami bazowymi. Wielkość ta zawiera już poprawkę z metody getLeading.

getLeading()
Zwraca zalecany dystans w pixelach pomiędzy linią dolną tekstu a linią górną tesktu znajdującego się poniżej.

Wielkość czcionki zwróconej przez metodę getSize() klasy Font jest wielkością abstrakcyjną. Teoretycznie odpowiada ona odległości od linii dolnej do linii górnej. Praktycznie jednak decyduje o tym projektant czcionki.

Poniższa lista przedstawia metody służące do uzyskiwania informacji o rozmiarach poziomych czcionek i liter. Te metody uwzględniają wielkość nie tylko samej liery, ale także spacji pomiędzy nimi. Inaczej mówiąc, zwracają one wielkość przesunięcia punktu bazowego (advance width) po wstawieniu danej litery do łańcucha.

getMaxAdvance()
Wielkoœć przesunięcia dla najszerszej litery danej czcionki.
bytesWidth(byte[], int, int)
Wielkoœć przesunięcia tekstu znajdujšcego się w tablicy bajtów. Pierwsza liczba całkowita przechowuje indeks poczštkowy tekstu w tablicy, a druga -- długość tekstu.
charWidth(int), charWidth(char)
Wielkość przesunięcia danej litery.
charsWidth(char[], int, int)
Wilekość przesunięcia łańcucha z tablicy.
stringWidth(String)
Wilekość przesunięcia danego łańcucha.
getWidths()
Wielkość przesunięcia każdych 256 pierwszych liter w czcionce.


Jerzy Bobiński - Gdańsk 03.05.1998