兄弟,考虑以下简单的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 new
,consolas
代表arial
。
我不想替换内容和html内容,我喜欢用tahoma
渲染方法来做,也许可以覆盖一些东西,IDK。
现在我怎么能克服它的老兄呢?
提前谢谢。
答案 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);
修改强> 你的意思是这样吗?
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);
}
}