我正在使用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
的{{1}}部分。在这种情况发生后,如果发生某种特定的事件模式,JEditorPane.getText
会被破坏。有什么方法可以不创建HTML text
吗?如果不是这样,那么这个问题的最佳解决方法是什么?
PS:JDK Bug系统中有一些旧的报告here。报告的原因不同,但也显示,之后<p-implied>
中添加了相同的<p-implied>
。我知道此链接中报告的问题在<head></head>
类中使用JTextPane
(JEditorPane
}的子类和setCharacterAttributes
方法,但该方法也调用相同的JTextPane
我在里面使用的方法。
答案 0 :(得分:3)
您使用0位置,但对于HTMLDocument,这些位置属于HEAD(非BODY)部分。
看起来您只是用来刷新内容。您可以在文档末尾应用相同的代码。
doc.setCharacterAttributes(doc.getLength(), 1, attrs, true);
因此,属性更改事件将应用于BODY。