簡體   English   中英

Java - 更改包含HTML的JTextPane中的字體

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM