SwingAnnotationFontFactory erweitert das AnnotationFontFactory-Interface um
die Methode createAWTFont(FontAttributeSet fontAttributeSet),
die aus einer FontAttributeSet-Definition einen passenden Java
AWT Font erstellen soll.
SwingAnnotationFontFactory-Implementationen werden verwendet um dem
Schriftauswahldialog und dem Texteditor (beide Java AWT
basierend) passende AWT Font-Instanzen zur Verfügung zu
stellen.
Funktionsweise / Ablauf:
In der folgenden Übersicht wird das Zusammenspiel / Verhalten der
GUI-Schriftauswahl und der SwingAnnotationFontFactory-Definition
erläutert:
Definition der verwendeten SwingAnnotationFontFactory-Implementationen im Annotationsprofil:
<annotation-type name="BaseText" archetype="BaseText" class="com.levigo.jadice.annotation.TextAnnotation"> ... <font-factory class="com.levigo.jadice.demo.font.annotation.SwingAnnotationProfileLogicalFontFactory"/> <font-factory class="com.levigo.jadice.demo.font.annotation.SwingAnnotationProfileStandard14FontFactory"/> <font-factory class="com.levigo.jadice.demo.font.annotation.SwingAnnotationProfileBasicFontFactory"/> ... </annotation-type>
Entsprechende Verwendung der SwingAnnotationFontFactory-Implementationen via Annotations-Klasse:
FontManagerFuture fontManagerFuture = SwingFontEnvironment.getFontManagerFuture(); Annotations.setDefaultAnnotationFontFactory(// new ChainedSwingAnnotationFontFactory(// new SwingAnnotationLogicalFontFactory(fontManagerFuture), // new SwingAnnotationStandard14FontFactory(fontManagerFuture), // new SwingAnnotationBasicFontFactory(fontManagerFuture) // )// );
Die Methode getAvailableFontAttributeSets() gibt folgende
FamilyName-Attribute zurück:
-
SwingAnnotationProfileLogicalFontFactoryDialog DialogInput Monospaced SansSerif Serif -
SwingAnnotationProfileStandard14FontFactoryArimo Cousine Tinos -
SwingAnnotationProfileBasicFontFactoryHier werden keine Family-Namen zurückgegeben.
Alle oben genannten Font-Family-Namen stehen dem Schriftauswahldialog und dem
Texteditor zur Verfügung, d. h. die createAWTFont(FontAttributeSet
fontAttributeSet)-Methode sollte auch entsprechende Java
AWT Font-Instanzen erzeugen um eine korrekte Darstellung in
den GUI-Editorkomponenten zu gewährleisten.
Schriftauswahldialog sieht wie folgt aus:
| Arimo |
| Cousine |
| Dialog |
| DialogInput |
| Monospaced |
| SansSerif |
| Serif |
| Tinos |
Die Fontauswahl kann im Annotationsprofil definiert / gefiltert werden:
-
Mit folgender Definition sind alle Fonts auswählbar:
<annotation-type name="BaseText" archetype="BaseText" class="com.levigo.jadice.annotation.TextAnnotation"> ... <unrestricted name="fontFace" propertyType="java.lang.String"> <editor class="com.levigo.jadice.swing.internal.annotation.editors.FontFaceEditor" /> <default>Sansserif</default> </unrestricted> ... </annotation-type>
-
Mit folgender Einstellung können Fonts gezielt ausgewählt werden:
<annotation-type name="BaseText" archetype="BaseText" class="com.levigo.jadice.annotation.TextAnnotation"> ... <discrete name="fontFace" propertyType="java.lang.String"> <editor class="com.levigo.jadice.swing.internal.annotation.editors.FontFaceEditor" /> <default>Sansserif</default> <!-- Folgende Fonts sind auswählbar --> <allowed>Sansserif</allowed> <allowed>Serif</allowed> <allowed>Monospaced</allowed> <allowed>Arimo</allowed> <allowed>Cousine</allowed> <allowed>Tinos</allowed> </discrete> ... </annotation-type>
Hier werden nur die mit dem allowed-Element definierten
Font-Family-Namen im Schriftauswahldialog angezeigt:
| Arimo |
| Cousine |
| Monospaced |
| SansSerif |
| Serif |
| Tinos |
Die Fontdefinitionen werden im Schriftauswahldialog sortiert (alphanumerisch
aufsteigend) angezeigt, ist eine Fontdefinition in den
SwingAnnotationFontFactory-Implementationen nicht verfügbar, wird sie im
Auswahlmenü ausgeblendet.
Wird ein Fontname aus der Liste ausgewählt, wird dieser der entsprechenden
TextAnnotation-Instanz via setFontFace(String
fontFace)-Methode gesetzt, beim darauf folgenden Darstellungs- /
Rendervorgang wird aus dem Fontnamen und den Stilinformationen erneut eine
Fontabfrage erstellt und ausgeführt (siehe „Aufbau und Funktion einer Fontabfrage“).
Die Implementationen im Paket
com.levigo.jadice.appbase.annotation.font im jadice document platform 5
Swing-Appbase-Modul benötigen im Konstruktor eine FontManagerFuture-Instanz und
können daher nicht im Annotationsprofil verwendet werden. Bei erfolgreicher Suche in
der entsprechenden FontManager-Instanz wird ein Font-Objekt zurückgegeben.
Diese Klassen stehen auch als Quellcode zur Verfügung. Die Implementationen werden
aktuell in der SwingFontEnvironments-Klasse im Swing-Demo-Client-Modul
verwendet.
-
SwingAnnotationBasicFontFactoryDiese Klasse liefert eine vektorbasierte
Font-Basisimplementation mit einem eingeschränkten Zeichensatz (a-z, A-Z, 0-9, Leerzeichen), es sind keine Sonderzeichen vorhanden. DiegetAvailableFontAttributeSets()-Methode gibt eine leereCollectionzurück. DieFontManagerFuture-Instanz muss die Standard-14 Fonts registriert haben, damit diecreateAWTFont(FontAttributeSet fontAttributeSet)-Methode eine passende Java AWT Font-Instanz erzeugen kann, hier wird immer der Standard-14-Font 'Arimo' zurückgegeben, ist ein anderer Font gewünscht, muss eine eigene Implementation erstellt werden. -
SwingAnnotationLogicalFontFactoryDiese Implementation löst logische Fontnamen nach jadice Standard-14 Fonts auf (siehe
LogicalFontIdentifier,LogicalFontFactory), diegetAvailableFontAttributeSets()-Methode stellt alle logische Fontdefinitionen zur Verfügung. Die benötigteFontManagerFuture-Instanz muss die Standard-14 Fonts registriert haben, diecreateAWTFont(FontAttributeSet fontAttributeSet)-Methode erstellt aus dem Standard-14 Fontdatenstrom eine Java AWT Font-Instanz. -
SwingAnnotationStandard14FontFactoryDiese Implementation löst alle jadice Standard-14 Fontnamen auf (siehe
Standard14Substitute,Standard14FontFactory), diegetAvailableFontAttributeSets()-Methode stellt alle Standard-14 Fontdefinitionen zur Verfügung. Die benötigteFontManagerFuture-Instanz muss die Standard-14 Fonts registriert haben, diecreateAWTFont(FontAttributeSet fontAttributeSet)-Methode erstellt aus dem Standard-14 Fontdatenstrom eine Java AWT Font-Instanz. -
SwingAnnotationSystemFontFactoryDiese Implementation versucht Fontnamen nach Systemfonts aufzulösen, die
getAvailableFontAttributeSets()-Methode stellt alle System-Fontdefinitionen zur Verfügung. Die benötigteFontManagerFuture-Instanz muss System-Fonts registriert haben, diecreateAWTFont(FontAttributeSet fontAttributeSet)-Methode erstellt aus dem Font-Family-Namen eine passende Java AWT Font-Instanz. -
SwingAnnotationGenericStylesSystemFontFactoryFunktionsweise entspricht der
SwingAnnotationSystemFontFactory-Implementation, diegetAvailableFontAttributeSets()-Methode stellt nur System-Fontdefinitionen zur Verfügung, die die Stilarten plain / normal, bold / fett, italic / kursiv und bold-italic / fett-kursiv erfüllen. -
ChainedSwingAnnotationFontFactoryDiese Implementation fasst mehrere
SwingAnnotationFontFactory-Instanzen zusammen, diegetAvailableFontAttributeSets()-Methode stellt die Fontdefinitionen aus allen registriertenAnnotationFontFactory-Instanz zur Verfügung. DiecreateAWTFont(FontAttributeSet fontAttributeSet)-Methode gibt den ersten Treffer von den registrierten Instanzen zurück.
Die Implementationen im Paket com.levigo.jadice.demo.font.annotation
im jadice document platform 5 Swing-Demo-Client-Modul besitzen einen Standardkonstruktor und können
somit im Annotationsprofil verwendet werden, hier wird intern eine
FontManagerFuture-Instanz mit Standard-14 / System-Fonts verwendet. Diese Klassen
befinden sich in einem Demo-Modul, stehen als Quellcode zur Verfügung und sollten
bei Verwendung kopiert und entsprechend angepasst werden, da sich der Quelltext der
Klassen in Zukunft ändern kann.
-
SwingAnnotationProfileBasicFontFactoryFunktionsweise entspricht der
SwingAnnotationBasicFontFactory, intern wird eineSwingAnnotationBasicFontFactory-Instanz erstellt, die benötigteFontManagerFuture-Instanz wird aus derSwingFontEnvironments-Klasse viagetFontManagerFuture()-Methode geholt. -
SwingAnnotationProfileLogicalFontFactoryFunktionsweise entspricht der
SwingAnnotationLogicalFontFactory, intern wird eineSwingAnnotationLogicalFontFactory-Instanz erstellt, die benötigteFontManagerFuture-Instanz wird aus derSwingFontEnvironments-Klasse viagetFontManagerFuture()-Methode geholt. -
SwingAnnotationProfileStandard14FontFactoryFunktionsweise entspricht der
SwingAnnotationStandard14FontFactory, intern wird eineSwingAnnotationStandard14FontFactory-Instanz erstellt, die benötigteFontManagerFuture-Instanz wird aus derSwingFontEnvironments-Klasse viagetFontManagerFuture()-Methode geholt. -
SwingAnnotationProfileSystemFontFactoryFunktionsweise entspricht der
SwingAnnotationSystemFontFactory, intern wird eineSwingAnnotationSystemFontFactory-Instanz erstellt, die benötigteFontManagerFuture-Instanz wird aus derSwingFontEnvironments-Klasse viagetFontManagerFuture()-Methode geholt. -
SwingAnnotationProfileGenericStylesSystemFontFactoryFunktionsweise entspricht der
SwingAnnotationGenericStylesSystemFontFactory, intern wird eineSwingAnnotationGenericStylesSystemFontFactory-Instanz erstellt, die benötigteFontManagerFuture-Instanz wird aus derSwingFontEnvironments-Klasse viagetFontManagerFuture()-Methode geholt.

