Czcionki
W Javie można korzystać z różnych typów czcionek, które związane są z daną
platformą na jakiej pracuje Maszyna Wirtualna. Dostęp do czcionek odbywa się
poprzez trzy typy nazw: nazwy logiczne czcionek, nazwy czcionek, nazwy rodziny
czcionek. Nazwy logiczne czcionek to nazwy zdefiniowane dla Javy. Możliwe są
następujące nazwy logiczne czcionek w Javie: Dialog, DialogInput, Monospaced,
Serif, SansSerif, oraz Symbol. Nazwy logiczne są odwzorowywane na nazwy
czcionek powiązane z czcionkami dla danego systemu. Odwzorowanie to występuje
w pliku font.properties znajdującego się w katalogu lib podkatalogu jre (Java Runtime
Engine). W pliku tym zdefiniowano również sposób kodowania znaków. Z tego
powodu w zależności od sposobu kodowania i typów wykorzystywanych czcionek
definiowane są różne pliki font.properties z odpowiednim rozszerzeniem np.
font.properties.pl. Przykładowe fragmenty plików opisujący właściwości czcionek to
np.:
//////Wiiinnndddooowsss NTTT fffooonnnttt...ppprrrooopppeeerrrtttiiieeesss:::
(((.........)))
ssseeerrriiifff...000===TTTiiimeeesss Neeew Rooomaaannn,,,ANSIII___CHARSETTT
ssseeerrriiifff...111===WiiinnngggDiiinnngggsss,,,SYMBOLLL___CHARSETTT,,,NEED___CONVERTTTED
(((.........)))
//////Sooolllaaarrriiisss fffooonnnttt...ppprrrooopppeeerrrtttiiieeesss...ppplll:::
(((......)))
ssseeerrriiifff...ppplllaaaiiinnn...000===---llliiinnnoootttyyypppeee---tttiiimeeesss---meeedddiiiuuum---rrr---nnnooorrrmaaalll------***---%ddd---***---***---ppp---***---iiisssooo888888555999---111
ssseeerrriiifff...111===---mooonnnoootttyyypppeee---tttiiimeeesssnnneeewrrrooomaaannn---rrreeeggguuulllaaarrr---rrr---nnnooorrrmaaalll------***---%ddd---***---***---ppp---***---iiisssooo888888555999---222
(((.........)))
Różnica pomiędzy nazwą logiczną czcionek w Javie a ich nazwami jest niewielka,
np. nazwa logiczna Serif, nazwa serif. Różnice nazw ukazuje poniższy program:
Przykład 6.3:
//Nazwy.java
import java.awt.*;
public class Nazwy {
private Font f;
Nazwy (){
f = new Font("Serif",Font.PLAIN,12);
System.out.println("Oto nazwa logiczna czcionki Serif: "+f.getName());
System.out.println("Oto nazwa czcionki Serif: "+f.getFontName());
f = new Font("SansSerif",Font.PLAIN,12);
System.out.println("Oto nazwa logiczna czcionki SansSerif: " + f.getName());
System.out.println("Oto nazwa czcionki SansSerif: " +f.getFontName());
f = new Font("Dialog",Font.PLAIN,12);
System.out.println("Oto nazwa logiczna czcionki Dialog: "+f.getName());
System.out.println("Oto nazwa czcionki Dialog: "+f.getFontName());
f = new Font("DialogInput",Font.PLAIN,12);
System.out.println("Oto nazwa logiczna czcionki DialogInput: " + f.getName());
System.out.println("Oto nazwa czcionki DialogInput: "+ f.getFontName());
f = new Font("Monospaced",Font.PLAIN,12);
System.out.println("Oto nazwa logiczna czcionki Monospaced: "+ f.getName());
System.out.println("Oto nazwa czcionki Monospaced: "+ f.getFontName());
f = new Font("Symbol",Font.PLAIN,12);
System.out.println("Oto nazwa logiczna czcionki Symbol: "+ f.getName());
System.out.println("Oto nazwa czcionki Symbol: "+f.getFontName());
}
public static void main(String args[]){
Nazwy czcionki = new Nazwy();
}
}// koniec public class Nazwy
W pracy z Javą w celu stworzenia uniwersalnego kodu należy korzystać z nazw
logicznych. Dla danej platformy można oczywiście używać nazw fontów tam
zainstalowanych. W celu uzyskania informacji o zainstalowanych czcionkach na
danej platformie należy posłużyć się metodami klasy GraphicsEnvironment (w
poprzednich wersjach JDK należało korzystać z metody getFontList() klasy Toolkit).
Poniższy program ukazuje zainstalowane czcionki w systemie poprzez podanie nazw
rodzin czcionek oraz poszczególnych nazw.
Przykład 6.4:
//Czcionki.java:
import java.awt.*;
import java.awt.event.*;
public class Czcionki extends Frame {
public String s[];
private Font czcionki[];
private Font f;
Czcionki (String nazwa){
super(nazwa);
f = new Font("Verdana",Font.BOLD,12);
s=GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
czcionki=GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
}
public static void main(String args[]){
Czcionki okno = new Czcionki("Lista czcionek");
okno.setSize(600,500);
okno.setLayout(new GridLayout(2,1));
List lista1 = new List(1, false);
for (int i=0; i<okno.s.length; i++){
lista1.add(okno.s[i]);
}
lista1.setFont(okno.f);
okno.add(lista1);
List lista2 = new List(1, false);
for (int i=0; i<okno.czcionki.length; i++){
lista2.add(okno.czcionki[i].toString());
}
lista2.setFont(okno.f);
okno.add(lista2);
okno.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.out.println("Dziekujemy za prace z programem...");
System.exit(0);
}
});
okno.setVisible(true);
}
}// koniec public class Czcionki
Pełny opis czcionek można uzyskać posługując się metodami zdefiniowanymi w
klasie FontMetrics. Podstawowe metody umożliwiają między innymi uzyskanie
informacji o szerokości znaku lub znaków dla wybranej czcionki (charWithd(),
charsWidth()), o wysokości czcionki (getHight()), o odległości między linią bazową
czcionki a wierzchołkiem znaku (getAscent()), o odległości między linią bazową
czcionki a podstawą znaku (getDescent()), itd.
Ustawianie czcionek dla danego komponentu polega na stworzeniu obiektu klasy
Font a następnie na wywołaniu metody komponentu setFont(), np.:
(((.........)))
Cooompppooonnneeennnttt ccc;;;
(((.........)))
FFFooonnnttt fff === nnneeew FFFooonnnttt (((„„„Arrriiiaaalll”””,,, FFFooonnnttt...PLLLAIIIN,,, 111222)));;;
ccc...ssseeetttFFFooonnnttt(((fff)));;;
(((.........)))
Wywołanie konstruktora klasy Font w powyższym przykładzie wymaga określenia
nazwy lub nazwy logicznej czcionki, stylu, oraz rozmiaru czcionki. Styl czcionki może
być określony przez następujące pola klasy Font:
Font.PLAIN – tekst zwykły,
Font.ITALIC – tekst pochyły (kursywa),
Font.BOLD – tekst pogrubiony,
Font.ITALIC + Font.BOLD – tekst pogrubiony i pochyły.
Do tej pory omówione zostały podstawowe własności grafiki dostarczanej przez
Java2D z pominięciem obsługi obrazów i kolorów. Zarządzanie kolorami i metody
definiowania, wyświetlania i przetwarzania obrazów są niezwykle istotne z punktu
widzenia aplikacji medycznych. Dlatego teraz te zagadnienia zostaną osobno
omówione.