JEditorPane HTMLDocument добавляет p-подразумеваемые в HTML без необходимости, когда вызывается setCharacterAttributes

Я создаю редактор, используя JEditorPane, HTMLDocument а также HTMLEditorKit, У меня есть панель инструментов, которая имеет различные компоненты для изменения атрибутов стиля редактора. Одним из них является JComboBox изменить ZOOM_FACTOR приписывать. Код ниже является кодом, который выполняется, когда это JComboBox Значение меняется.

    final SimpleAttributeSet attrs = new SimpleAttributeSet();
    zoomCombo.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            String s = (String) zoomCombo.getSelectedItem();
            s = s.substring(1, s.length());
            double scale = new Double(s).doubleValue() / 100;
            editorPane.getDocument().putProperty("ZOOM_FACTOR", new Double(scale));

            try {
                StyledDocument doc = (StyledDocument) editorPane.getDocument();
                doc.setCharacterAttributes(0, 1, attrs, true);
                doc.insertString(0, "", null); // refresh
            } catch (Exception ex) {
                logger.error("Hata", ex);
            }
        }
    });

doc.setCharacterAttributes(0, 1, attrs, true); это строка, где начинается корень моей проблемы. После выполнения этой строки кода <p-implied> добавляется в <head></head> часть HTML text в JEditorPane.getText, И после того, как это произойдет, если какой-то определенный шаблон событий произойдет мой HTML text искажается. Есть ли способ, как не создавать <p-implied> вместе? Если нет, то что может быть лучшим решением этой проблемы?

PS: в системе JDK Bug сообщается о чем-то старом. Сообщается по другой причине, но там также показано, что <p-implied> добавляется в <head></head> после этого. Я знаю, что проблема, указанная в этой ссылке, использует JTextPane (подкласс JEditorPane) а также setCharacterAttributes метод в JTextPane класс, но этот метод также вызывает тот же setCharacterAttributes Метод, который я использовал внутри себя.

1 ответ

Решение

Вы используете позицию 0, но для HTMLDocument позиции принадлежат секции HEAD (не BODY).

Похоже, вы используете его только для обновления контента. Вы можете применить тот же код для конца документа.

doc.setCharacterAttributes(doc.getLength(), 1, attrs, true);

Таким образом, событие изменения атрибута применяется к телу.

Другие вопросы по тегам