Skip to content

fonts (Schriftarten)

Import

Das statische Attribut fonts der Klasse Controller kann über einen statischen Import eingebunden werden:

import static pi.Controller.fonts;

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, SansSerif oder Monospaced
  • 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:

import java.awt.Font;

Font titleFont = new Font("Serif", Font.BOLD, 24);

Die drei Argumente bedeuten:

  • "Serif": Name oder Familie der Schrift
  • Font.BOLD: Stil
  • 24: 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:

Fett und kursiv können kombiniert werden:

Font emphasis = new Font("SansSerif", Font.BOLD | Font.ITALIC, 18);

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 Schriftfamilie
  • getName() 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:

Text text = new Text("Hallo Welt")
    .font("Arial")
    .style(1);

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.