我正在使用 aJTextPane
来显示字符和符号,后者由自定义绘制的JComponents
. 例如,文本窗格可能会显示如下内容:
文本窗格是用户可编辑的,并且允许用户通过任意位置的按钮添加更多符号并作为选定文本的替换。我通过JTextPane.insertComponent()
方法做到这一点。在应用程序的某个时刻,我需要知道文本窗格中当前显示的内容,我指的不仅是输入的文本,还包括其中包含的确切组件。
我在处理Positions
和DocumentListeners
管理我的文本窗格的内容方面遇到了很多麻烦,但我一直在造成比我解决的问题更多的问题。这就是为什么我最终决定,我的麻烦可能是由于我的设计错误,所以我决定看看,如果我不能通过文本窗格访问我的组件。
翻遍了AbstractDocument
相关类的文档和源代码,找到了接口javax.swing.text.Element
。然后我让我的应用程序输出
for(int i = 0; i < textPane.getDocument().getLength(); i++) {
System.out.println(((StyledDocument) textPane.getDocument()).getCharacterElement(i));
}
这给了我:
叶元素(内容)0,4
叶元素(内容)0,4
叶元素(内容)0,4
叶元素(内容)0,4
LeafElement(组件)4,5
叶元素(内容)5,9
叶元素(内容)5,9
叶元素(内容)5,9
叶元素(内容)5,9
LeafElement(组件)9,10
看到LeafElements
我得到的似乎确实有一些关于在 中的哪个位置显示什么的信息Document
,我认为必须有可能在该位置获得实际内容。又搜索了半个小时如何获取每个元素所代表的内容,我放弃了,决定在这里发布我的问题,希望你们中的一些人可能知道如何完成这个!?
我见过这个问题,有人试图通过 访问组件textPane.getComponents()
,它返回一个组件数组,其中包含实际包含的组件的确切数量JTextPane
,但它们都是 type javax.swing.text.ComponentView$Invalidator
,这显然对我没有用。也许我只是不知道如何从这里正确继续,因为转换为我的符号的原始类型不起作用。
tl;博士
如何从文本窗格中获取位于 aJComponent
文本内的 aJTextPane
及其位置?