Я только что начал портировать свое приложение для качания из ОС X к Windows, и все больно больно JLabel
S.
Я заметил, что шрифт, указанный на SetFont
, игнорируется, если текст метки является HTML (это не происходит на Mac). Форматирование HTML является чрезвычайно Полезно для читабельности на сложных дисплее.
При нормальных обстоятельствах я указываю шрифт в теге HTML, но шрифт, который я использую, загружен во время выполнения, используя font.createfont
с TTF из Бар. Я пытался использовать имя загруженного шрифта в теге шрифта, но это не сработало.
Есть ли способ, которым я могу использовать нагруженные AWT.FONT
с HTML-Ifeed JLabel
в Windows?
Вот пример. Я не могу поделиться шрифтом своего приложения, но я просто провел его с этим (чистый TTF), и то же самое происходит:
http: // www.dafont.com/sophom. ree-readbook.font
import java.awt.Font;
import java.io.File;
import javax.swing.*;
public class LabelTestFrame extends JFrame {
public LabelTestFrame() throws Exception {
boolean useHtml = true;
String fontPath = "C:\\test\\test_font.ttf";
JLabel testLabel = new JLabel();
Font testFont = Font.createFont(Font.TRUETYPE_FONT, new File(fontPath)).deriveFont(18f);
testLabel.setFont(testFont);
if (useHtml) testLabel.setText("Some HTML'd text");
else testLabel.setText("Some plaintext");
getContentPane().add(testLabel);
setSize(300,300);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {new LabelTestFrame().setVisible(true);}
catch (Exception e) {e.printStackTrace();}
}
});
}
}
Редактирование: достаточно интересно, если я использую один из TTF из папки Lib / fonts (в этом случае один из шрифтов Lucida здесь переименован в test_java.ttf) Этот фрагмент создает идентичные результаты с логическое включение и выключение.
public LabelTestFrame() throws Exception {
boolean useHtml = false;
String fontPath = "C:\\test\\test_java.ttf";
JLabel testLabel = new JLabel();
Font testFont = Font.createFont(Font.TRUETYPE_FONT, new File(fontPath)).deriveFont(18f);
testLabel.setFont(testFont);
if (useHtml) testLabel.setText("Some HTML'd text");
else testLabel.setText("Some plaintext");
getContentPane().add(testLabel);
setSize(300,300);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {new LabelTestFrame().setVisible(true);}
catch (Exception e) {e.printStackTrace();}
}
});
}
Отредактируйте 2: Способ, описанный здесь для настройки шрифта JLABEL по умолчанию имеет ровно одинаковую проблему (открытый текст показывает, что текст HTML'D не): Изменение шрифта JLABEL по умолчанию
. Изменить 3: i ' Не заметили, что даже случайные шрифты из Dafont будут работать, если они установлены в системе (даже с этим точным кодом, где я загружаю копию [Установленного теперь] TTF из файла).