2012-02-17 57 views
8

我有一個JTextPane,並且在該JTextPane中有一些文本。但是,因爲我一直在使用窗格中的HTML,文本似乎已經自動更改爲Times New Roman。Java - 在包含HTML的JTextPane中更改字體

我試圖將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); 

    } 

} 

謝謝!

回答

7

簡單的方法可能是這樣的:

string fontfamily = pane.getFont().getFamily(); 

這會給你的默認字體。然後使用CSS:

pane.setText("<html><body style=\"font-family: " + fontfamily + "\"<b>This is some text!</b></html>"); 
+0

這幫了我吧,我在另一個類實現的新方法返回的默認字體的組件,然後使用類似HTML內的擁有。謝謝。 – mino 2012-02-17 22:07:32

1

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文本,包括所有的字體標籤。

+0

我試過你的方法,但它似乎並沒有爲我工作,確實如何顯示。 – mino 2012-02-17 22:10:17

+1

是那些技術上需要在許多其他標籤內重新指定的迂迴標籤之一 - 您不能將其包裹在外面。所以這個解決方案對於一般內容來說太脆弱了。 – 2013-11-05 09:16:30

22

下面將做的伎倆:

pane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true); 

(注:JTextPane延伸JEditorPane。)

更新(2016年8月):

有關設置生存看&感覺和系統更改(例如在Windows控制面板中更改了字體)該行可以放在此處:

@Override 
    public void updateUI() { 
     super.updateUI(); 
     putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true); 
    } 

(這是在施工期間也被稱爲。)

+0

真棒,謝謝! – Mark 2013-11-21 11:02:15