增加显示HTML文本的JTextPane的字体大小

3
假设我有一个JTextPane显示一个HTML文档。
我希望,在按下按钮时,文档的字体大小增加。
不幸的是,这并不像看起来那么简单... 我找到了一种改变整个文档字体大小的方法,但这意味着所有文本都设置为我指定的字体大小。我想要的是字体大小按比例增加到已有的文档中。
我需要遍历文档中的每个元素,获取字体大小,计算新的大小并将其设置回去吗?如何执行此操作?最好的方法是什么?
3个回答

4
在你提供的示例中,你会找到一些线索,帮助你完成你想做的事情。
这行代码:
StyleConstants.setFontSize(attrs, font.getSize());

该方法可以改变JTextPane的字体大小,并将其设置为您作为参数传递给此方法的字体大小。如果您想要根据当前大小设置新的大小,可以使用该方法。

//first get the current size of the font
int size = StyleConstants.getFontSize(attrs);

//now increase by 2 (or whatever factor you like)
StyleConstants.setFontSize(attrs, size * 2);

这将使JTextPane的字体大小翻倍。当然,您可以以较慢的速度增加字体大小。
现在您需要一个按钮来调用您的方法。
JButton b1 = new JButton("Increase");
    b1.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            increaseJTextPaneFont(text);
        }
    });

所以您可以编写一个类似于示例中的方法,如下所示:
public static void increaseJTextPaneFont(JTextPane jtp) {
    MutableAttributeSet attrs = jtp.getInputAttributes();
    //first get the current size of the font
    int size = StyleConstants.getFontSize(attrs);

    //now increase by 2 (or whatever factor you like)
    StyleConstants.setFontSize(attrs, size * 2);

    StyledDocument doc = jtp.getStyledDocument();
    doc.setCharacterAttributes(0, doc.getLength() + 1, attrs, false);
}

他希望“字体大小按比例增加,以便与文档中已有的保持一致。”但您的示例将文档中所有字体设置为相同大小。 - ka3ak

1

你可以用 CSS,只修改字体样式。

由于它按原样呈现 HTML,更改 CSS 类可能已经足够了。


0

经过长时间的探索,我找到了一种方法来缩放在JTextPane中显示HTML的字体。

这是一个成员函数,它使JTextPane能够缩放字体。它不处理JTextPane内部的图像。

private void scaleFonts(double realScale) {
    DefaultStyledDocument doc = (DefaultStyledDocument) getDocument();
    Enumeration e1 = doc.getStyleNames();

    while (e1.hasMoreElements()) {
        String styleName = (String) e1.nextElement();
        Style style = doc.getStyle(styleName);
        StyleContext.NamedStyle s = (StyleContext.NamedStyle) style.getResolveParent();
        if (s != null) {
            Integer fs = styles.get(styleName);
            if (fs != null) {
                if (realScale >= 1) {
                    StyleConstants.setFontSize(s, (int) Math.ceil(fs * realScale));
                } else {
                    StyleConstants.setFontSize(s, (int) Math.floor(fs * realScale));
                }
                style.setResolveParent(s);
            }
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接