[英]Java - Change font in a JTextPane containing HTML
我有一個JTextPane,我在JTextPane中有一些文本。 但是,因為我一直在Pane中使用HTML,所以文本似乎已自動更改為Times New Roman。
我正在嘗試將JTextPane中的字體類型設置為GUI的默認字體(當它不是HTML時,JTextPane的字體)。 但是,我不能只將字體設置為一種字體,因為它與操作系統不同,因此我想找到一種方法來獲取默認字體,然后將我擁有的文本更改為默認字體。
為了演示文本在轉換時如何交換到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);
}
}
謝謝!
以下將做到這一點:
pane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true);
(注意JTextPane
擴展了JEditorPane
。)
更新(2016年8月):
為了使設置能夠在外觀和系統更改中生存(例如,在Windows控制面板中更改了字體),可以在此處放置以下行:
@Override
public void updateUI() {
super.updateUI();
putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true);
}
(這在施工期間也稱為。)
最簡單的方法可能是這樣的:
string fontfamily = pane.getFont().getFamily();
這將為您提供默認字體。 然后使用CSS應用它:
pane.setText("<html><body style=\"font-family: " + fontfamily + "\"<b>This is some text!</b></html>");
JComponent html渲染器使用自己的字體,而不是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文本,包括所有的字體標記。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.