Wie lässt sich der Schrifttyp einer Komponente festlegen und ändern?

In Java wird eine Schrift durch die Klasse Font repräsentiert. Sie enthält eine Reihe von Methoden zum Konfigurieren von Schriftarten, deren Stil und Größe. Das Beispiel zeigt, wie sich einem JLabel eine Schrift zugewiesen werden und diese dann in geänderter Form auf ein weiteres JLabel angewendet werden kann.

Allgemeines

Ein Betriebssystem definiert drei Standard-Schriftarten, die zur Darstellung von Texten am Computer genutzt werden, eine serifierte Schrift, eine serifenlose Schrift und eine Festbreitenschrift.
Java verwendet entsprechend die drei Schriftfamilien 'Serif', 'SansSerif' und 'Monospace', die je nach verwendetem Betriebssystem in dessen Standard-Schriftfamilien ausgegeben werden.

Um innerhalb eines Java-Programms eine andere Schriftfamilie zu verweden oder um Eigenschaften ansprechen zu können, muss ein Objekt der Klasse Font erzeugt und dies der darstellenden Komponente zugewiesen werden. Hierzu stehen drei Konstruktoren der Klasse Font bereit. Der hier verwendete nutzt neben dem Schriftnamen als String zwei int-Parameter für den Schriftstil und die Größe in Punkt. Es muss unbedingt darauf geachtet werden, dass diese beiden nicht verwechselt werden. Die zu verwendende Schriftfamilie muss natürlich auch auf dem Computer installiert sein, um angezeigt werden zu können. Ist dies nicht der Fall, so wird statt dessen die jeweilige Standardschrift verwendet.

Font font = new Font("Verdana", Font.PLAIN, 40);
JLabel label = new JLabel("Beispieltext");
label.setFont(font);
System.out.println(label.getFont().getFamily());

Mit der Methode Component.getFont() kann das Font-Objekt einer Komponente angesprochen werden.

Das Beispiel

Nach dem Erzeugen des JFrame als Anwendungsfenster und zweier JLabel werden diese dem JFrame in einem GridLayout hinzugefügt.
Die Schrift, die auf den JLabel angezeigt werden soll wird durch einen Konstruktor der Klasse Font erzeugt. Hierzu wird der Konstuktor, wie oben angesprochen, mit drei Parametern aufgerufen. Sie betreffen die Schriftfamilie, den Schriftstil und die Größe in Punkt.
Dem Beispiel ist zu entnehmen, wie zwei Stile der Klasse Font gemeinsam angewendet werden können. In diesem Fall wird die Schrift fett (bold) und kursiv (italic) gesetzt.
Hierzu müssen die statischen Felder der Schriftstile durch den logischen Und-Operator ('|') getrennt voneinander angegeben werden. Deren Bitmasken werden intern verrechnet und auf das Objekt der Klasse angewendet. Die Stile werden dabei gemischt, nicht addiert, sodass eine Schrift durch zusätzliche Angaben von Font.BOLD z.B. nicht noch fetter gemacht werden kann.
Durch die Methode setFont() wird die Schrift der Komponente zugewiesen.

import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class FontClass {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        JLabel label1 = new JLabel();
        JLabel label2 = new JLabel();
        frame.setLayout(new GridLayout(2,1));
        frame.getContentPane().add(label1);
        frame.getContentPane().add(label2);
        
        Font font = new Font("Verdana", Font.BOLD | Font.ITALIC, 20);
        label1.setFont(font);
        label1.setText("Font unver\u00e4ndert");
        font = font.deriveFont(Font.PLAIN, 50F);
        label2.setFont(font);
        label2.setText("Font ge\u00e4ndert");
        
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setTitle("Font Test");
        frame.setVisible(true);
    }
}

Die Methode deriveFont() der Klasse Font dient zur Änderung eines Font-Objektes. Sie ist mit unterschiedlichen Parametern mehrfach überladen, sodass die Eigenschaften auf verschiedene Weise geändert werden können. Die Methode gibt eine abgewandelte Kopie des aufrufenden Font-Objektes zurück.

#