fonts (Schriftarten)
Import
Das statische Attribut fonts der Klasse Controller kann über einen statischen Import eingebunden werden:
Klasse Font
Die Klasse Font beschreibt in Java, wie Text dargestellt werden soll. Ein Font-Objekt speichert vor allem drei Dinge:
- die Schriftfamilie, zum Beispiel
Serif,SansSerifoderMonospaced - den Stil, also normal, fett oder kursiv
- die Größe in Punkten
In Engine Pi werden Schriftarten an mehreren Stellen verwendet, zum Beispiel bei Text oder im FontContainer. Deshalb ist es sinnvoll, die AWT-Klasse Font zuerst als normale Java-Klasse zu verstehen.
Eine Schriftart erzeugen
Ein Font-Objekt wird meist mit dem Konstruktor Font(String name, int style, int size) erzeugt:
Die drei Argumente bedeuten:
"Serif": Name oder Familie der SchriftFont.BOLD: Stil24: Größe in Punkt
Typische Familiennamen sind:
Sie funktionieren systemübergreifend zuverlässiger als frei gewählte Schriftnamen.
Schriftstile
Die Klasse Font kennt die Stilkonstanten:
- Font#PLAIN: normaler Text
- Font#BOLD: fetter Text
- Font#ITALIC: kursiver Text
Fett und kursiv können kombiniert werden:
Informationen über eine Schriftart auslesen
Viele Eigenschaften lassen sich direkt abfragen:
Font font = new Font("Monospaced", Font.PLAIN, 16);
String family = font.getFamily(); // "Monospaced"
String name = font.getName(); // "Monospaced"
int size = font.getSize(); // 16
boolean bold = font.isBold(); // false
boolean italic = font.isItalic(); // false
Wichtig ist der Unterschied zwischen getFamily() und getName():
getFamily()liefert die SchriftfamiliegetName()liefert den Namen, mit dem die Schrift erstellt wurde
Je nach Betriebssystem können sich die Ergebnisse leicht unterscheiden.
Eine vorhandene Schriftart anpassen
Font-Objekte sind unveränderlich. Methoden wie Font#deriveFont(float) oder Font#deriveFont(int,float) erzeugen daher immer ein neues Objekt:
Font base = new Font("Serif", Font.PLAIN, 14);
Font larger = base.deriveFont(20f);
Font bold = base.deriveFont(Font.BOLD);
Font boldLarge = base.deriveFont(Font.BOLD, 22f);
Das ist praktisch, wenn nur Größe oder Stil geändert werden sollen.
Einsatz in Engine Pi
Für die Figur Text kann eine AWT-Schrift direkt übergeben werden:
import java.awt.Font;
import pi.Text;
Text text = new Text("Hallo Welt")
.font(new Font(Font.SERIF, Font.BOLD, 18))
.height(4);
Oft reicht in Engine Pi auch einfach der Name einer Systemschrift:
Die Zahl 1 steht hier für fett. Etwas typsicherer ist die Variante mit
FontStyle:
import pi.resources.font.FontStyle;
Text text = new Text("Hallo Welt")
.font("Arial")
.style(FontStyle.BOLD);
Schriftarten über den Font-Container laden
Engine Pi verwaltet Schriftarten über den FontContainer. Er ist über Controller.fonts erreichbar.
Einige typische Beispiele:
import static pi.Controller.fonts;
import java.awt.Font;
Font arial = fonts.get("Arial");
Font arialBold = fonts.get("Arial", Font.BOLD);
Font arialLarge = fonts.get("Arial", 22);
Font arialBoldLarge = fonts.get("Arial", Font.BOLD, 22);
Außerdem gibt es Hilfsmethoden für Systemschriftarten:
String[] installedFonts = FontContainer.systemFonts();
boolean hasArial = FontContainer.isSystemFont("Arial");
Damit lässt sich vorab prüfen, ob eine gewünschte Schrift auf dem aktuellen System vorhanden ist.
Standardschrift der Engine
Engine Pi bringt eine eigene Standardschrift mit. Sie kann direkt über den FontContainer geladen werden:
import static pi.Controller.fonts;
import java.awt.Font;
import pi.resources.font.FontStyle;
Font regular = fonts.defaultFont();
// Schriftstil wird als Aufzählungstyp / Enumeration angegeben
Font italic = fonts.defaultFont(FontStyle.ITALIC);
// Schriftstil wird als Ganzzahl über die statischen Attribute der Klasse Fonts angegeben
Font bold = fonts.defaultFont(Font.BOLD);
// Schriftstil wird als Ganzzahl angegeben
Font boldItalic = fonts.defaultFont(3);
Das ist nützlich, wenn ein Projekt unabhängig von lokal installierten Systemschriftarten bleiben soll.