Увеличение размера шрифта JTextPane, который отображает текст HTML - PullRequest
3 голосов
/ 02 июня 2009

Допустим, у меня есть JTextPane, который показывает HTML-документ.

Я хочу, чтобы при нажатии кнопки размер шрифта документа увеличивался.

К сожалению, это не так просто, как кажется ... Я нашел способ изменить размер шрифта всего документа, но это означает, что весь текст установлен на размер шрифта, который я указал . Я хочу, чтобы размер шрифта увеличивался в пропорциональной шкале по сравнению с тем, что уже было в документе.

Должен ли я перебирать каждый элемент в документе, получать размер шрифта, вычислять новый размер и устанавливать его обратно? Как я могу сделать такую ​​операцию? Какой самый лучший способ?

Ответы [ 3 ]

4 голосов
/ 02 июня 2009

В приведенном вами примере вы найдете некоторые подсказки о том, что вы пытаетесь сделать.

Линия

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);
}
1 голос
/ 02 июня 2009

Возможно, вы могли бы использовать css и изменять только шрифт стилей.

Поскольку он отображает HTML как есть, изменения класса css может быть достаточно.

0 голосов
/ 07 марта 2019

После долгого изучения я нашел способ увеличения шрифтов в 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);
            }
        }
    }
}
...