Java HTMLEditorKit InsertHml将换行标记添加到字符串中

Java HTMLEditorKit InsertHml将换行标记添加到字符串中,java,newline,htmleditorkit,Java,Newline,Htmleditorkit,结果是: HTMLEditorKit.insertHTML(doc, doc.getLength(), "Test", 0, 0, null); HTMLEditorKit.insertHTML(doc, doc.getLength(), "Test", 0, 0, HTML.Tag.B); -添加了“\n” "Test " 结果是: HTMLEditorKit.insertHTML(doc, doc.getLength(), "Test", 0, 0, null); HTMLEdito

结果是:

HTMLEditorKit.insertHTML(doc, doc.getLength(), "Test", 0, 0, null);
HTMLEditorKit.insertHTML(doc, doc.getLength(), "Test", 0, 0, HTML.Tag.B);
-添加了“\n”

"Test
"
结果是:

HTMLEditorKit.insertHTML(doc, doc.getLength(), "Test", 0, 0, null);
HTMLEditorKit.insertHTML(doc, doc.getLength(), "Test", 0, 0, HTML.Tag.B);
它将显示如JTextPane中所示的文本:

123456789

首先,考虑到你三个月前问了这个问题,我不知道你是否已经解决了你的问题,呵呵。但我也遇到了这个问题,我想我会把我是如何解决它的

这可能是一个丑陋的解决方案,但我就是这样做的:

123
456
789
HTMLEditorKit.insertHTML(doc,doc.getLength(),“Test”,0,0,HTML.Tag.SPAN);
同样,以下连续的insertHTML调用将以您想要的方式打印数字:

HTMLEditorKit.insertHTML(doc, doc.getLength(), "<span>Test</span>", 0, 0, HTML.Tag.SPAN);
HTMLEditorKit.insertHTML(doc,doc.getLength(),“123”,0,0,HTML.Tag.SPAN);
HTMLEditorKit.insertHTML(doc,doc.getLength(),“456”,0,0,HTML.Tag.SPAN);
HTMLEditorKit.insertHTML(doc,doc.getLength(),“789”,0,0,HTML.Tag.SPAN);
我不知道为什么仅仅在字符串中包含span标记是不够的,但是您还必须通过函数调用传递HTML.tag.span(这是我花了这么长时间才弄明白的)。 如果没有指定标记对象,它可能会覆盖添加换行符的默认行为

这种方法唯一的问题是,所有这些span标记都会使html文档变得杂乱无章,至少对我来说,这是不可取的

如果有任何其他(更优雅的)方法来操纵HTMLEditorKit,使其不自动添加换行符,我很想知道。

我发现:

只需将“”替换为unicode即可。您可以使用documentFilter或截取空格键:

HTMLEditorKit.insertHTML(doc, doc.getLength(), "<span>123</span>", 0, 0, HTML.Tag.SPAN);
HTMLEditorKit.insertHTML(doc, doc.getLength(), "<span>456</span>", 0, 0, HTML.Tag.SPAN);
HTMLEditorKit.insertHTML(doc, doc.getLength(), "<span>789</span>", 0, 0, HTML.Tag.SPAN);

我认为这个问题有一个简单的解决方案,使用:

protected class Filtre extends DocumentFilter implements Serializable {

    public Filtre() {
    }

    @Override
    public void insertString(DocumentFilter.FilterBypass fb, int offset, String str, AttributeSet attr) throws BadLocationException {
        replace(fb, offset, 0, str, attr);
    }

    @Override
    public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String str, AttributeSet attrs) throws BadLocationException {
        String result = str.replaceAll(" ", "\u00A0");
        fb.replace(offset, length, result, attrs);
    }
当您想要添加纯文本和html时,请在html中添加HTMLEditorKit.insertHTML