Получить компонент из JTextPane через javax.swing.text.Element?

Я используюJTextPane для отображения символов и символов, где последние представлены заказным нарисованным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));
}

который дал мне:

LeafElement (содержание) 0,4

LeafElement (содержание) 0,4

LeafElement (содержание) 0,4

LeafElement (содержание) 0,4

LeafElement (компонент) 4,5

LeafElement (содержание) 5,9

LeafElement (содержание) 5,9

LeafElement (содержание) 5,9

LeafElement (содержание) 5,9

LeafElement (компонент) 9,10

Видя, чтоLeafElements что у меня действительно есть какая-то информация о том, что отображается в какой позиции вDocumentЯ подумал, что должно быть возможно получить фактическое содержание в этой позиции. Потратив еще полчаса на то, как получить контент, который представляет каждый элемент, я сдался и решил опубликовать здесь свой вопрос, надеясь, что некоторые из вас могут знать, как этого добиться !?

Я видел этовопрос где кто-то пытается получить доступ к компонентам черезtextPane.getComponents(), который возвращает массив компонентов с точным количеством компонентов, фактически содержащихся вJTextPane, но они все типаjavax.swing.text.ComponentView$Invalidatorчто, очевидно, бесполезно для меня. Может быть, я просто неотсюда не видно, как правильно продолжить, потому что приведение к исходному типу моего символа нет работа.

ТЛ; др

Как мне получитьJComponent, который находится внутри текстаJTextPane, а его позиция из текстовой панели?

Ответы на вопрос(2)

Ваш ответ на вопрос