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

时间:2012-02-17 21:23:16

标签: java swing jtextpane

我有一个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);

    }

}

谢谢!

3 个答案:

答案 0 :(得分:22)

以下将解决这个问题:

 pane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true);

(请注意,JTextPane扩展了JEditorPane。)

更新(2016年8月):

为了生存设置Look&amp;感觉和系统更改(例如,在Windows控制面板中更改了字体)可以将行放在此处:

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

(在施工期间也称为此。)

答案 1 :(得分:8)

最简单的方法可能是这样的:

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

这将为您提供默认字体。然后使用CSS应用它:

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

答案 2 :(得分: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文本,包括所有的字体标记。