Java Jython-如何在DefaultStyledDocument中合并两个Leaf元素?

Java Jython-如何在DefaultStyledDocument中合并两个Leaf元素?,java,swing,jython,inner-classes,defaultstyleddocument,Java,Swing,Jython,Inner Classes,Defaultstyleddocument,我正在尝试“规范化”DefaultStyledDocument子类,从某种意义上说,我们有org.w3c.dom.Node.normalize():也就是说,合并相邻的文本“leaves”。在DefaultStyledDocument的情况下,如果两个相邻的叶子具有相同的属性(或没有),则这些叶子将被标识为要合并 下面是一个简单的版本(我们不检查实际属性:它是一个使用纯文本或带有一种可能标记样式的文本的用例) 当我运行此命令时,会出现以下错误: 线程“AWT-EventQueue-0”中出现异常

我正在尝试“规范化”DefaultStyledDocument子类,从某种意义上说,我们有
org.w3c.dom.Node.normalize()
:也就是说,合并相邻的文本“leaves”。在DefaultStyledDocument的情况下,如果两个相邻的叶子具有相同的属性(或没有),则这些叶子将被标识为要合并

下面是一个简单的版本(我们不检查实际属性:它是一个使用纯文本或带有一种可能标记样式的文本的用例)

当我运行此命令时,会出现以下错误:

线程“AWT-EventQueue-0”中出现异常 java.lang.ArrayIndexOutOfBoundsException位于 java.lang.System.arraycopy(本机方法)位于 javax.swing.text.AbstractDocument$BranchElement.replace(AbstractDocument.java:2290)

在尝试将
javax.swing.text.DefaultStyledDocument()
作为LeaveElement构造函数中的参数1之前,我急忙添加了这一点,我尝试了“
self
”(即在第一行调用
normalize
的DefaultStyledDocument):同样的错误。

是的,可能做到:

AbstractDocument.BranchElement.replace()
如下所示:

public void replace(int offset, int length, Element[] elems)
  ...
这里的“偏移量”和“长度”指的是BranchElement的子元素(通常是LeafElements),而不是StyledDocument中底层文本的偏移量和长度

比我聪明的人会更早得到这个。API文档(Java7)可能会让它更清晰一些

public void replace(int offset, int length, Element[] elems)
  ...