当setCharacterAttributes调用时,JEditorPane HTMLDocument不必要地将p-implied添加到HTML中

时间:2014-12-26 12:39:32

标签: java swing jeditorpane dom htmleditorkit

我正在使用JEditorPaneHTMLDocumentHTMLEditorKit创建编辑器。我有一个工具栏,其中包含各种组件来更改编辑器的样式属性。其中一个是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>类中使用JTextPaneJEditorPane}的子类和setCharacterAttributes方法,但该方法也调用相同的JTextPane我在里面使用的方法。

1 个答案:

答案 0 :(得分:3)

您使用0位置,但对于HTMLDocument,这些位置属于HEAD(非BODY)部分。

看起来您只是用来刷新内容。您可以在文档末尾应用相同的代码。

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

因此,属性更改事件将应用于BODY。