如何在粗体​​/斜体时更改Java BasicHTML视图中使用的字体

时间:2016-07-18 20:09:34

标签: java html swing view fonts

所以这是我棘手的问题:

在我们的应用中,我们使用Swing Views来显示文本项,更具体地说是使用和解释HTML的文本项。 这是一个显示我们机制的小片段:

JLabel label = new JLabel();
label.setFont(StyleContext.getDefaultStyleContext().getFont("Roboto Light", Font.PLAIN, 13));

label.setText("<p><strong>bold</strong></p>");

htmlView = BasicHTML.createHTMLView(label, label.getText());

这个解决方案对我们来说非常好用了好几年了,而且在文本字符串中从HTML / CSS转换而来的所有粗体或斜体字都显示得很好。

但是现在我们正在使用一种新字体(更具体地说是:Roboto Light),当字词是粗体或斜体时,我们对结果字体/“字母看起来如何”感到不满。

现在我们的问题是:当标准字体与粗体/斜体字组合时,有没有办法告诉视图或任何组件,使用哪种字体?

1 个答案:

答案 0 :(得分:4)

可以在样式表中设置字体。

enter image description here

import javax.swing.*;

public class CustomFontForBoldAndItalic {

    public static String EOL = System.getProperty("line.separator");
    private static String styles = 
            "p {font-family: serif; font-size: 25px;}" + EOL
            + "b {font-family: sans-serif;}" + EOL
            + "em {font-family: monospaced;}" + EOL
            ;
    private static String html = "<html><head><title>HaHa</title><style type='text/css'>" 
            + EOL
            + styles + "</style></head><body>"
            + "<p>This part is <b>bold</b> while this part is <em>italic</em>.</p>"
            + "</body></html>";

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                JOptionPane.showMessageDialog(null, new JLabel(html));
            }
        };
        SwingUtilities.invokeLater(r);
    }
}