Java-изменение шрифта в JTextPane, содержащем HTML
У меня есть JTextPane, и у меня есть текст в этом JTextPane. Однако, поскольку я использовал HTML в панели, текст, похоже, был автоматически изменен на Times New Roman.
Я пытаюсь установить тип шрифта в JTextPane на шрифт по умолчанию GUI (шрифт JTextPane, когда он не HTML). Однако я не могу просто установить шрифт на один шрифт, потому что он отличается от операционной системы, поэтому я хочу найти способ получить шрифт по умолчанию и затем измените текст, который у меня есть, на шрифт по умолчанию.
чтобы продемонстрировать, как текст заменяется на Times New Roman при преобразовании, следующий код-это формат, который я использовал. Как изменить его, чтобы достичь своей цели?
import javax.swing.JFrame;
import javax.swing.JTextPane;
public class GUIExample {
public static void main(String[] args) {
JFrame frame = new JFrame("My App");
frame.setSize(300,300);
JTextPane pane = new JTextPane();
pane.setContentType("text/html");
pane.setText("<html><b>This is some text!</b></html>");
frame.add(pane);
frame.setVisible(true);
}
}
спасибо!
3 ответов
самый простой способ, вероятно, что-то вроде этого:
string fontfamily = pane.getFont().getFamily();
это даст вам шрифт по умолчанию. Затем просто примените его с помощью CSS:
pane.setText("<html><body style=\"font-family: " + fontfamily + "\"<b>This is some text!</b></html>");
следующее сделает трюк:
pane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true);
(обратите внимание, что JTextPane
выходит JEditorPane
.)
Обновление (Август 2016):
для настройки, чтобы выжить внешний вид и системные изменения (Например, шрифты изменены в Панели управления Windows) линия может быть помещена здесь:
@Override
public void updateUI() {
super.updateUI();
putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true);
}
(Это также называется во время строительства.)
jcomponent HTML renderer использует свой собственный шрифт, а не jcomponent. Чтобы заставить компонент отображать то же самое, вам нужно установить атрибуты шрифта в строке html. Помимо прочего, вам нужно будет установить семейство шрифтов, размер, жирный / курсив и т. д.
в качестве примера вы можете сделать следующее:
JTextPane pane = new JTextPane();
Font font = pane.getFont();
pane.setContentType("text/html");
pane.setText("<html><font face=\"" + font.getFamily() + "\" size=\"" + font.getSize() + "\"></font>This is some text!</html>");
было бы довольно тривиально, чтобы создать функцию, которая делает это для вас. Передайте ему JComponent и строку, и он создаст текст html для вас, включая все теги шрифтов.