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

Java 增加显示HTML文本的JTextPane的字体大小,java,swing,jtextpane,Java,Swing,Jtextpane,假设我有一个显示HTML文档的JTextPane 我希望,只要按下一个按钮,文档的字体大小就会增加 不幸的是,这并不像看上去那么容易。我想要的是字体大小按比例增加到文档中已有的大小 我是否必须迭代文档中的每个元素,获取字体大小,计算新的大小并将其设置回原位?我怎么能做这样的手术?最好的方法是什么?您可以使用css,只修改字体样式 由于它按原样呈现HTML,因此更改css类可能就足够了 在您链接到的示例中,您将找到一些关于您正在尝试做什么的线索 线路 StyleConstants.setFontS

假设我有一个显示HTML文档的JTextPane

我希望,只要按下一个按钮,文档的字体大小就会增加

不幸的是,这并不像看上去那么容易。我想要的是字体大小按比例增加到文档中已有的大小


我是否必须迭代文档中的每个元素,获取字体大小,计算新的大小并将其设置回原位?我怎么能做这样的手术?最好的方法是什么?

您可以使用css,只修改字体样式


由于它按原样呈现HTML,因此更改css类可能就足够了

在您链接到的示例中,您将找到一些关于您正在尝试做什么的线索

线路

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);
}

经过长时间的探索,我找到了一种在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);
            }
        }
    }
}
他希望“字体大小与文档中已有的字体大小成比例地增加。”但您的示例将文档中的所有字体设置为相同的大小。