Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage |
<< | < | > | >> | API | Kapitel 24 - Textausgabe |
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 muß 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 sind beide 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, daß die gewünschten Schriftarten bzw. Attribute auf dem Zielsystem nicht installiert sind. Beim Erzeugen von Font-Objekten ist also einige Vorsicht geboten. |
|
Schriften sind generell recht unportabel, deshalb ist bei ihrer Verwendung Vorsicht angebracht. Insbesondere bei der Verwendung von systemspezifischen Schriftarten kann es sein, daß 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. |
|
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 24.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 24.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 |
Abbildung 24.3: Ausgabe verschiedener Fonts
Es gibt im AWT eine Klasse Toolkit, die als Hilfsklasse bei der Abbildung der portablen AWT-Eigenschaften dient. Toolkit ist standardmäßig abstrakt, wird aber von jeder AWT-Implementierung konkretisiert und den Anwendungen über die Klassenmethode getDefaultToolkit zur Verfügung gestellt. Während die meisten Methoden von Toolkit nur für Implementatoren von AWT-Portierungen von Interesse sind, gibt es auch einige Methoden, die in der Anwendung sinnvoll verwendet werden können. Eine dieser Methoden ist getFontList:
public String[] getFontList() |
java.awt.Toolkit |
Diese Methode liefert ein Array von Strings mit den Namen der Standardschriftarten, die in der vorliegenden AWT-Implementierung verfügbar sind.
Die folgende paint-Methode listet alle verfügbaren Standardschriften auf dem Bildschirm auf:
001 /* Standardschriften.inc */ 002 003 public void paint(Graphics g) 004 { 005 Font font; 006 String[] arfonts = Toolkit.getDefaultToolkit().getFontList(); 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,(i+1)*(36+5)); 012 } 013 } |
Standardschriften.inc |
Mit dem JDK 1.2 wurde die Methode getFontList als deprecated markiert. Sie wird ersetzt durch die Methode getAvailableFontFamilyNames der Klasse GraphicsEnvironment, die im JDK 1.2 dazu dient, die verfügbaren Grafikgeräte und -konfigurationen zu beschreiben. Mit der statischen Methode getLocalGraphicsEnvironment kann das aktuelle GraphicsEnvironment-Objekt beschafft werden. |
|
static GraphicsEnvironment getLocalGraphicsEnvironment() String[] getAvailableFontFamilyNames() |
java.awt.GraphicsEnvironment |
Das vorige Beispiel müßte also wie folgt geändert werden:
001 /* Standardschriften12.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 } |
Standardschriften12.inc |
Die Ausgabe des Programms ist (man muß das Fenster etwas größer ziehen, damit alle Schriften angezeigt werden):
Abbildung 24.4: Liste der Standardschriften
Die letzte Schrift ist ZapfDingbats, eine Schrift mit vorwiegend grafischen Symbolen. Da ihr Zeichensatz anders organisiert ist als bei normalen Schriften, werden lediglich eckige Kästchen ausgegeben.
Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage, Addison Wesley, Version 3.0.1 |
<< | < | > | >> | API | © 1998-2003 Guido Krüger, http://www.javabuch.de |