Custom Font in AttributedString Java

Splayfer

Mitglied
Hey zusammen,

ich arbeite seit einiger Zeit an einem Discord Level System. Unter anderem sollte man dort mithilfe des /rank Commands in der Lage sein, ein Bild mit Leveldetails zu erhalten. Ich habe es auch hinbekommen, dass die Bilder und Texte etc. richtig angeordnet sind, aber was ich bis jetzt immer noch nicht geschafft habe ich das ändern der Schriftart.

Ich habe eine .ttf Datei ein meinen src Ordner importiert und einen AttributedString definiert, aber es ist zwecklos. Jedes mal wenn ich in Zeile 15 versuche die Schriftart zu ändern, verschwindet der Text auf dem Bild einfach und es wird keine Exception ausgeworfen.

Kann mir da irgendwer weiterhelfen?

Gruß Splayfer

[CODE lang="java" title="Mein Code:" highlight="15"] Font leagueGothic = null;

try {

leagueGothic = Font.createFont(Font.CENTER_BASELINE, new File("src/media/fonts/LeagueGothic-Regular.ttf"));
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(leagueGothic);

} catch (Exception exception) {
exception.printStackTrace();
}

AttributedString leveltxt = new AttributedString("Level: " + level + ".level"));
leveltxt.addAttribute(TextAttribute.SIZE, 30);
leveltxt.addAttribute(TextAttribute.FONT, leagueGothic);

BufferedImage container = new BufferedImage(934, 282, BufferedImage.TYPE_INT_ARGB);
Graphics g = container.getGraphics();
g.drawString(leveltxt.getIterator(), 400, 50);[/CODE]
 

Anhänge

  • 853618861294485534[1].png
    853618861294485534[1].png
    217,9 KB · Aufrufe: 2
Also das mit dem nicht gefunden: Dann müsst eine IOException geworfen worden sein. Das kann man mal überprüfen, aber selbst wenn das der Fall ist: Das würde nicht das Problem lösen.

Font.createFont erzeugt einen Font der Größe 1. Du wirst also die Schrift haben, aber mit Größe 1 wirst Du nichts lesen können aber vermutlich wirst Du paar schwarze Punkte finden können 🙂

The new Font is created with a point size of 1 and style PLAIN.

Was Du also machen könntest, wäre eine abgeleitete Font mit der gewünschten Größe zu übergeben. Also z.B.:
leveltxt.addAttribute(TextAttribute.FONT, leagueGothic.deriveFont(25f));
um eine Font in einer Größe von 25 zu bekommen.

Das mit dem GraphicsEnvironment wirst Du vermutlich auch wegnehmen können, denn Du hinterlegst die Font selbst ja. Du wirst also vermutlich irgendwo den AttributedString selbst malen mit einem Aufruf wie:
g2d.drawString(attributedString.getIterator(), 15, 60);
 
Und da das mit dem Laden prinzipiell angesprochen wurde. Das Laden kann man ggf. als Ressource durchführen:
Font font = Font.createFont(Font.TRUETYPE_FONT, getClass().getResourceAsStream("/media/fonts/LeagueGothic-Regular.ttf"));

Das wäre der Aufruf, wenn der src Ordner auf der Ressource Ordner ist (Also typisches Java Projekt in Eclipse oder Intellij). Wenn da Resources anders hinterlegt sind a.la. src/media ist ein Ressource Ordner, dann wäre das entsprechend anzupassen.
Der Pfad ist auf jeden Fall ab dem Ressource Ordner anzugeben - und man kann das Ausgabe-Verzeichnis prüfen (bin, out oder wo auch immer das Ergebnis der Übersetzung hin kopiert wird), wo die ttf Datei zu finden ist...
 
Und da das mit dem Laden prinzipiell angesprochen wurde. Das Laden kann man ggf. als Ressource durchführen:
Font font = Font.createFont(Font.TRUETYPE_FONT, getClass().getResourceAsStream("/media/fonts/LeagueGothic-Regular.ttf"));

Das wäre der Aufruf, wenn der src Ordner auf der Ressource Ordner ist (Also typisches Java Projekt in Eclipse oder Intellij). Wenn da Resources anders hinterlegt sind a.la. src/media ist ein Ressource Ordner, dann wäre das entsprechend anzupassen.
Der Pfad ist auf jeden Fall ab dem Ressource Ordner anzugeben - und man kann das Ausgabe-Verzeichnis prüfen (bin, out oder wo auch immer das Ergebnis der Übersetzung hin kopiert wird), wo die ttf Datei zu finden ist...
Danke nochmal für deine Hilfe! Es war tatsächlich einfach nur der Fall, dass der Text zu klein skaliert war! Nochmal danke, dass du mir so schnell weiterhelfen konntest!
 

Neue Themen


Zurück
Oben