替换默认的JTextPane字体呈现

时间:2014-05-22 19:02:59

标签: java swing fonts jtextpane

兄弟,考虑以下简单的html内容。

<html>

<head>
    <style>.foot{color:red} .head{color:black}</style>
</head>

<body>
    <span id="xx" style="font-family:consolas">Hola!</span><br/>
    <span id="xk" style="font-family:tahoma">Hola!</span>
</body>

</html>

现在我有一个swing应用程序,我想用JTextPane显示上面的代码,但我想知道JTextPane如何加载consolas和{{1} }字体打印tahoma文本数据。

我想覆盖默认字体呈现,应使用Hola字体代替courier newconsolas代表arial
我不想替换内容和html内容,我喜欢用tahoma渲染方法来做,也许可以覆盖一些东西,IDK。
现在我怎么能克服它的老兄呢?
提前谢谢。

1 个答案:

答案 0 :(得分:2)

可能您正在寻找: JEditorPane#HONOR_DISPLAY_PROPERTIES (Java Platform SE 8)

  

用于指示是否为默认字体的客户端属性的键   如果是字体或者,则使用组件中的前景色   样式文本中未指定前景色。

textPane.setFont(new Font("courier new", Font.PLAIN, 12));
textPane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE);

修改 你的意思是这样吗?

enter image description here

import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.text.html.*;

public class IgnoreStyleTest {
  private static final String HTMLTEXT =
    "<html><head><style>.foot{color:red} .head{color:black}</style></head>"
    + "<span id='xx' style='font-family:consolas'>Hola! consolas</span><br/>"
    + "<span id='xk' style='font-family:tahoma'>Hola! tahoma</span>";
  private final JTextPane textPane1 = new JTextPane();
  private final JTextPane textPane2 = new JTextPane();
  private JComponent makeUI() {
    textPane1.setContentType("text/html");
    textPane1.setText(HTMLTEXT);

    //Font font = new Font("courier new", Font.PLAIN, 12);
    textPane2.setContentType("text/html");
    textPane2.setFont(new Font("courier new", Font.PLAIN, 32));
    textPane2.setDocument(new HTMLDocument() {
      @Override public Font getFont(AttributeSet attr) {
        StyleContext styles = (StyleContext) getAttributeContext();
        //return styles.getFont(attr);
        //return font;
        Font f = styles.getFont(attr);
        String ff = f.getFamily();
        System.out.println(ff);
        //if ("".equals(ff)) { //...
        return textPane2.getFont(); //Ignore: style font-family
      }
    });
    textPane2.setText(HTMLTEXT);

    JPanel p = new JPanel(new GridLayout(0, 1));
    p.add(new JScrollPane(textPane1));
    p.add(new JScrollPane(textPane2));
    return p;
  }
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        createAndShowGUI();
      }
    });
  }
  public static void createAndShowGUI() {
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.getContentPane().add(new IgnoreStyleTest().makeUI());
    f.setSize(320, 240);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }
}