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);
Таким образом, событие изменения атрибута применяется к телу.