Я только что начал переносить свое приложение Swing из OS X в Windows, и с JLabel
s.
все становится болезненно. Я заметил, что шрифт, указанный в setFont
, игнорируется, если меткатекст HTML (это не происходит на Mac).Форматирование HTML ЧРЕЗВЫЧАЙНО полезно для удобочитаемости на сложных экранах.
В обычных условиях я бы указывал шрифт в теге HTML, но используемый шрифт загружается во время выполнения, используя Font.createFont
с ттфиз банки.Я попытался использовать имя загруженного шрифта в теге шрифта, но это не сработало.
Есть ли способ использовать загруженный awt.Font
с html-ified JLabel
в Windows?
Вот пример.Я не могу поделиться шрифтом моего приложения, но я просто запустил его с этим (чистый TTF), и происходит то же самое поведение:
http://www.dafont.com/sophomore-yearbook.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("<html>Some HTML'd text</html>");
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 JRE (в данном случае один из шрифтов 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("<html><b>Some HTML'd text</b></html>");
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: Я заметил, что даже случайные шрифты из dafont будут работать, если они установлены в системе (даже с этим точным кодом, где я загружаю копию [теперь установленного] ttf из файла).