Java Swing JLabel, HTML и персонализирани шрифтове

В нашето приложение Java Swing зареждаме персонализиран шрифт и го добавяме към JLabel:

try {
  this.font = Font.createFont(Font.TRUETYPE_FONT, new File("resources/fonts/ourcoolfont.ttf")).deriveFont(16f);
} catch (Exception e) {
  this.font = new Font("Arial", Font.PLAIN, 16);
}
this.label.setFont(this.font);

Лесен и работещ добре на 3 различни системи. Докато някой друг не се опита да го стартира. Шрифтът беше зареден (както използваме и на някои други елементи на Swing), но не се използва в JLabel.

След известно търсене разбрах, че не можете да използвате едновременно HTML и зареден шрифт. По някакви причини работи на моята система (предполагам, че има нещо общо с версията на Java), но не и на някои други. Тъй като бихме искали проектът да работи в остарели версии на Java, просто искане за актуализиране не е опция.

Единият вариант е да инсталираме шрифта на компютъра, нещо, което не обичаме да правим. Най-доброто решение, което намерих, е това: Как мога да създам текстов компонент на Java/Swing, който едновременно е стилизиран и има персонализиран шрифт?

Този въпрос обаче е за JTextPane. JLabel изглежда няма getStyledDocument() метод, който мога да използвам за това.

Има ли някакъв начин да оставим нашия шрифт да работи с JLabel?


person Bv202    schedule 07.12.2011    source източник


Отговори (2)


За да използвате някакъв шрифт:

<html><head><style type="text/css">
body { font-family: Cool; } </style></head><body>...

Създаденият от вас шрифт трябва първо да бъде регистриран в singleton GraphicsEnvironment, за да бъде достъпен за всички:

GraphicsEnvironment genv = GraphicsEnvironment.getLocalGraphicsEnvironment();
genv.registerFont(font);
person Joop Eggen    schedule 07.12.2011
comment
Благодаря! Само регистрацията изглежда е достатъчна, за да разреши проблема :) - person Bv202; 08.12.2011

Тъй като StyledDocument разширява Document, може да можете да използвате негова реализация, използвайки setDocument() метод на JTextField.

person BenCole    schedule 07.12.2011