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.