{"id":2549,"date":"2013-12-01T14:30:46","date_gmt":"2013-12-01T12:30:46","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=2549"},"modified":"2013-12-01T14:30:46","modified_gmt":"2013-12-01T12:30:46","slug":"inselraus-neue-truetype-fonts-in-awtswing-nutzen","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2013\/12\/inselraus-neue-truetype-fonts-in-awtswing-nutzen\/","title":{"rendered":"Inselraus: Neue TrueType-Fonts in AWT\/Swing nutzen"},"content":{"rendered":"<p>Die auf allen Systemen vordefinierten Standardzeichens\u00e4tze sind etwas d\u00fcrftig, obwohl die Font-Klasse selbst jeden installierten Zeichensatz einlesen kann. Da ein Java-Programm aber nicht von der Existenz eines bestimmten Zeichensatzes ausgehen kann, ist es praktisch, einen Zeichensatz mit der Installation auszuliefern und dann diesen zu laden; das kann die Font-Klasse mit der statischen Methode createFont(\u2026) sein. Aus einem Eingabestrom liest die Methode den TrueType-Zeichensatz und erstellt das entsprechende Font-Objekt, Bsp.:<\/p>\n<p>Font font = Font.createFont( Font.TRUETYPE_FONT,<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getClass().getResourceAsStream( &#8222;\/NASALIZA.TTF&#8220;) ); <\/p>\n<p>Das erste Argument ist immer Font.TRUETYPE_FONT. Das zweite Argument bestimmt den Eingabestrom zur Bin\u00e4rdatei mit den Zeichensatzinformationen. Die Daten werden ausgelesen und zu einem Font-Objekt verarbeitet. <\/p>\n<p>Waren die Beschreibungsinformationen in der Datei ung\u00fcltig, so erzeugt die Font-Klasse eine FontFormatException(&#8222;Unable to create font \u2013 bad font data&#8220;). Dateifehler fallen nicht darunter und werden extra \u00fcber eine IOException angezeigt. Der Datenstrom wird anschlie\u00dfend nicht wieder geschlossen. <\/p>\n<p>An dieser Stelle verwundert es vielleicht, dass die Arbeitsweise der statischen Methode createFont(\u2026) der des Konstruktors \u00e4hnlich sein m\u00fcsste, aber der Parameterliste die Attribute fehlen. Das liegt daran, dass die Methode automatisch einen Zeichensatz der Gr\u00f6\u00dfe 1 im Stil Font.PLAIN erzeugt. Um einen gr\u00f6\u00dferen Zeichensatz zu erzeugen, m\u00fcssen wir ein zweites Font-Objekt anlegen, was am einfachsten mit der Methode deriveFont(\u2026) geschieht. <\/p>\n<p>class java.awt.Font<br \/>implements Serializable <\/p>\n<ul>\n<li>static Font createFont(int fontFormat, InputStream fontStream)<br \/>throws FontFormatException, IOException<br \/>Liefert ein neues Zeichensatzobjekt in der Gr\u00f6\u00dfe von einem Punkt und mit keinem besonderen Stil.<\/li>\n<\/ul>\n<p>Soll nicht direkt der Font verwendet werden, sondern soll der Zeichensatz unter seinem Namen in den Namensraum gelegt werden, sodass er sp\u00e4ter auch \u00fcber den Font-Konstruktor gefunden werden kann, l\u00e4sst er sich mit registerFont(Font) anmelden. Das sieht etwa so aus: <\/p>\n<p>GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont( font );<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die auf allen Systemen vordefinierten Standardzeichens\u00e4tze sind etwas d\u00fcrftig, obwohl die Font-Klasse selbst jeden installierten Zeichensatz einlesen kann. Da ein Java-Programm aber nicht von der Existenz eines bestimmten Zeichensatzes ausgehen kann, ist es praktisch, einen Zeichensatz mit der Installation auszuliefern und dann diesen zu laden; das kann die Font-Klasse mit der statischen Methode createFont(\u2026) sein. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1],"tags":[],"class_list":["post-2549","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2549","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=2549"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2549\/revisions"}],"predecessor-version":[{"id":2550,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2549\/revisions\/2550"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=2549"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=2549"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=2549"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}