我仔细研究了你的问题,找到了解决方案:
只需将迭代TextPane元素的方法替换为:
private void iterateOverContent(JTextPane tp2) {
for(int i = 0; i < tp.getDocument().getLength(); i++) {
Element elem = ((StyledDocument) tp.getDocument()).getCharacterElement(i);
AttributeSet as = elem.getAttributes();
if (as.containsAttribute(AbstractDocument.ElementNameAttribute, StyleConstants.ComponentElementName)) {
if(StyleConstants.getComponent(as) instanceof JLabel) {
JLabel myLabel = (JLabel)StyleConstants.getComponent(as);
System.out.println(myLabel.getText());
}
}
System.out.println(((StyledDocument) tp.getDocument()).getCharacterElement(i));
}
}
如您所见,我首先将元素保存到一个新变量中,然后读取所有属性(是的,代码可能会更短,但这样更清晰-我希望:-)
之后,我们检查属性是否表示该元素是组件。
然后是重要的部分:我们可以通过StyleConstants从属性集中获取Component。getComponent方法。
最后只是一些理智的检查,看看我们是否真的可以将它键入JLabel。
顺致敬意,
大卫