Titel   Inhalt   Suchen   Index   DOC  Handbuch der Java-Programmierung, 7. Auflage
 <<    <     >    >>   API  Kapitel 25 - Textausgabe

25.2 Unterschiedliche Schriftarten



25.2.1 Font-Objekte

Führt man die Schriftausgabe wie bisher besprochen durch, werden die Texte in einem systemabhängigen Standard-Font ausgegeben. Soll ein anderer Font zur Textausgabe verwendet werden, so muss zunächst ein passendes Objekt der Klasse Font erzeugt und dem verwendeten Graphics-Objekt zugewiesen werden:

public void setFont(Font font)

public Font getFont()
java.awt.Graphics

Die Methode setFont wird dazu verwendet, das Font-Objekt font in den Grafikkontext einzutragen, und mit getFont kann der aktuelle Font abgefragt werden.

Das Erzeugen neuer Font-Objekte wird über die drei Parameter name, style und size des Konstruktors der Klasse Font gesteuert:

public Font(String name, int style, int size)
java.awt.Font

Der Parameter name gibt den Namen des gewünschten Fonts an. In allen Java-Systemen sollten die Namen SansSerif (früher Helvetica), Serif (früher TimesRoman) und Monospaced (früher Courier) unterstützt werden. Sie stehen für die systemspezifischen Proportionalzeichensätze der Familien Helvetica und TimesRoman bzw. für die nichtproportionale Familie Courier. Unter Windows werden diese Standardnamen auf die True-Type-Fonts Arial, Times New Roman und Courier New abgebildet.

Der zweite und dritte Parameter des Konstruktors ist jeweils vom Typ int. Ein beliebter Fehler besteht darin, beide zu verwechseln und so die Angaben für die Größe und die Textattribute zu vertauschen. Leider kann der Fehler vom Compiler nicht gefunden werden, sondern wird frühestens zur Laufzeit entdeckt. Selbst dann wird er leicht mit dem Fall verwechselt, dass die gewünschten Schriftarten bzw. Attribute auf dem Zielsystem nicht installiert sind. Beim Erzeugen von Font-Objekten ist also einige Vorsicht geboten.

 Warnung 

Schriften sind generell recht unportabel, deshalb ist bei ihrer Verwendung Vorsicht angebracht. Insbesondere bei der Verwendung von systemspezifischen Schriftarten kann es sein, dass der Font-Mapper eines anderen Systems eine völlig verkehrte Schrift auswählt und die Ausgabe des Programms dann unbrauchbar wird. Werden nur die genannten Standardschriften verwendet, so sollte die Schriftausgabe auf allen unterstützten Java-Systemen zumindest lesbar bleiben. Die alten Schriftnamen Helvetica, TimesRoman und Courier aus dem JDK 1.0 werden zwar noch unterstützt, sind aber als deprecated gekennzeichnet und sollten daher nicht mehr verwendet werden.

 Warnung 

Der Parameter style wird verwendet, um auszuwählen, ob ein Font in seiner Standardausprägung, fett oder kursiv angezeigt werden soll. Java stellt dafür die in Tabelle 25.1 aufgeführten numerischen Konstanten zur Verfügung. Die Werte BOLD und ITALIC können auch gemeinsam verwendet werden, indem beide Konstanten addiert werden.

Name Wert Bedeutung
Font.PLAIN 0 Standard-Font
Font.BOLD 1 Fett
Font.ITALIC 2 Kursiv

Tabelle 25.1: Style-Parameter

Der dritte Parameter des Konstruktors gibt die Größe der gewünschten Schriftart in Punkt an. Übliche Punktgrößen für die Ausgabe von Text sind 10 oder 12 Punkt.

Das folgende Beispiel gibt die drei Standardschriften in 36 Punkt aus:

001 /* Schriften.inc */
002 
003 public void paint(Graphics g)
004 {
005   Font font;
006   String[] arfonts = {"Serif","SansSerif","Monospaced"};
007 
008   for (int i=0; i<arfonts.length; ++i) {
009     font = new Font(arfonts[i],Font.PLAIN,36);
010     g.setFont(font);
011     g.drawString(arfonts[i],10,30 + (i+1)*(36+5));
012   }
013 }
Schriften.inc
Listing 25.2: Ausgabe verschiedener Schriften

Abbildung 25.3: Ausgabe verschiedener Fonts

Die Abbildung von Schriftnamen im JDK auf die dazu passenden Schriften des Betriebssystems wird durch die Datei font.properties im lib-Verzeichnis des JDK gesteuert, die zur Laufzeit vom AWT interpretiert wird. Werden hier Anpassungen vorgenommen, so ändert sich die Darstellung der Standardschriften.

 Hinweis 

25.2.2 Standardschriftarten

Es gibt im AWT eine Klasse GraphicsEnvironment, mit der wir uns die auf dem konkreten System verfügbaren Font-Familien abholen können:

static GraphicsEnvironment getLocalGraphicsEnvironment()

String[] getAvailableFontFamilyNames()
java.awt.GraphicsEnvironment

Das folgende Beispiel zeigt die verfügbaren Schriftarten an:

001 /* Standardschriften.inc */
002 
003 public void paint(Graphics g)
004 {
005   Font font;
006   GraphicsEnvironment ge =
007     GraphicsEnvironment.getLocalGraphicsEnvironment();
008   String[] arfonts = ge.getAvailableFontFamilyNames();
009 
010   for (int i=0; i<arfonts.length; ++i) {
011     font = new Font(arfonts[i],Font.PLAIN,36);
012     g.setFont(font);
013     g.drawString(arfonts[i],10,(i+1)*(36+5));
014   }
015 }
Standardschriften.inc
Listing 25.3: Auflistung der Standardschriften

Die Ausgabe des Programms ist (man muss das Fenster etwas größer ziehen, damit alle Schriften angezeigt werden):

Abbildung 25.4: Liste der Standardschriften


 Titel   Inhalt   Suchen   Index   DOC  Handbuch der Java-Programmierung, 7. Auflage, Addison Wesley, Version 7.0
 <<    <     >    >>   API  © 1998, 2011 Guido Krüger & Heiko Hansen, http://www.javabuch.de