Java Jython-如何在DefaultStyledDocument中合并两个Leaf元素?
我正在尝试“规范化”DefaultStyledDocument子类,从某种意义上说,我们有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”中出现异常
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)
...