Obtener un componente de un JTextPane a través de javax.swing.text.Element?

Estoy usando unJTextPane para mostrar caracteres y símbolos, donde estos últimos están representados por pintura personalizadaJComponents. Por ejemplo, el panel de texto podría mostrar algo como esto: El panel de texto es editable por el usuario y se le permite agregar más símbolos a través de un botón en cualquier posición y como reemplazo del texto seleccionado. Hago esto a través de laJTextPane.insertComponent() método. En algún punto de la aplicación, necesito saber qué se está mostrando actualmente en el panel de texto, y con eso quiero decir no solo el texto introducido, sino también los componentes exactos que contiene.

Pasé por grandes problemas conPositions yDocumentListeners para administrar el contenido de mi panel de texto, pero seguía causando más problemas de los que estaba resolviendo. Es por eso que finalmente decidí que mis problemas probablemente se debían a un fallo de diseño de mi parte, por lo que decidí ver si no puedo acceder a mis componentes a través del panel de texto.

Buscando a través de la documentación y el código fuente deAbstractDocument y otras clases relacionadas, encontré la interfazjavax.swing.text.Element. Entonces dejo que mi aplicación salga

for(int i = 0; i < textPane.getDocument().getLength(); i++) {
    System.out.println(((StyledDocument) textPane.getDocument()).getCharacterElement(i));
}

lo que me dio

LeafElement (contenido) 0,4

LeafElement (contenido) 0,4

LeafElement (contenido) 0,4

LeafElement (contenido) 0,4

LeafElement (componente) 4,5

LeafElement (contenido) 5,9

LeafElement (contenido) 5,9

LeafElement (contenido) 5,9

LeafElement (contenido) 5,9

LeafElement (componente) 9,10

Viendo que elLeafElements que obtuve parece tener algún tipo de información sobre lo que se muestra en qué posición en elDocument, Pensé que debía ser posible obtener el contenido real en esa posición. Después de buscar otra media hora de cómo obtener el contenido que representan cada uno de los elementos, me rendí y decidí publicar mi pregunta aquí, esperando que algunos de ustedes puedan saber cómo lograr esto.

He visto estopregunta donde alguien intenta acceder a los componentes a través detextPane.getComponents(), que devuelve una matriz de componentes con el número exacto de componentes realmente contenidos en elJTextPane, pero son todos del tipojavax.swing.text.ComponentView$Invalidator, lo que obviamente no me sirve. Tal vez simplemente no veo cómo continuar correctamente desde aquí, porque una conversión al tipo original de mi símbolo no funciona.

tl; dr

¿Cómo consigo unJComponent, que está dentro del texto de unaJTextPane, y su posición desde el panel de texto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta