Java Swing JLabel, HTML и пользовательские шрифты - PullRequest
5 голосов
/ 08 декабря 2011

В нашем приложении 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?

Ответы [ 2 ]

10 голосов
/ 08 декабря 2011

Чтобы использовать какой-либо шрифт:

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

Созданный вами шрифт должен быть сначала зарегистрирован в одноэлементном графическом окружении, чтобы он был доступен всем:

GraphicsEnvironment genv = GraphicsEnvironment.getLocalGraphicsEnvironment();
genv.registerFont(font);
2 голосов
/ 08 декабря 2011

Поскольку StyledDocument расширяется Document, вы можете использовать его реализацию, используя метод JTextField s setDocument().

...