Eine Komponente aus einem JTextPane über javax.swing.text.Element abrufen?

Ich benutze eineJTextPane um Zeichen und Symbole anzuzeigen, wobei letztere durch benutzerdefinierte Bemalung dargestellt werdenJComponents. Das Textfenster könnte beispielsweise Folgendes anzeigen: Das Textfenster kann vom Benutzer bearbeitet werden. Der Benutzer kann über eine Schaltfläche an einer beliebigen Position weitere Symbole hinzufügen und den ausgewählten Text ersetzen. Ich mache das über dieJTextPane.insertComponent() Methode. Irgendwann in der Anwendung muss ich wissen, was aktuell im Textbereich angezeigt wird, und damit meine ich nicht nur den eingegebenen Text, sondern auch die genauen darin enthaltenen Komponenten.

Ich habe mit viel zu tun gehabtPositions undDocumentListeners um den Inhalt meines Textfensters zu verwalten, aber ich verursachte immer mehr Probleme als ich löste. Aus diesem Grund habe ich mich letztendlich entschieden, dass meine Probleme wahrscheinlich auf einen Konstruktionsfehler zurückzuführen sind. Deshalb habe ich mich entschlossen, zu prüfen, ob ich nicht über das Textfenster zu meinen Komponenten komme.

Durchsuchen der Dokumentation und des Quellcodes vonAbstractDocument und andere verwandte Klassen fand ich die Schnittstellejavax.swing.text.Element. Ich lasse dann meine Bewerbung ausgeben

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

was gab mir:

LeafElement (Inhalt) 0,4

LeafElement (Inhalt) 0,4

LeafElement (Inhalt) 0,4

LeafElement (Inhalt) 0,4

LeafElement (Komponente) 4,5

LeafElement (Inhalt) 5,9

LeafElement (Inhalt) 5,9

LeafElement (Inhalt) 5,9

LeafElement (Inhalt) 5,9

LeafElement (Komponente) 9,10

Zu sehen, dass dieLeafElements Ich habe anscheinend Informationen darüber, was an welcher Position im Fenster angezeigt wirdDocumentIch stellte mir vor, dass es möglich sein muss, den tatsächlichen Inhalt an dieser Position abzurufen. Nachdem ich eine weitere halbe Stunde lang nach dem Inhalt der einzelnen Elemente gesucht hatte, gab ich es auf und entschloss mich, meine Frage hier zu posten, in der Hoffnung, dass einige von Ihnen vielleicht wissen, wie man das erreicht !?

Ich habe das gesehenFrage wo jemand versucht, auf die Komponenten zuzugreifentextPane.getComponents(), der ein Array von Komponenten mit der genauen Anzahl der tatsächlich in der Datei enthaltenen Komponenten zurückgibtJTextPane, aber sie sind alle vom Typjavax.swing.text.ComponentView$Invalidator, was mir natürlich nichts nützt. Vielleicht verstehe ich einfach nicht, wie ich von hier aus richtig weitermachen kann, weil eine Umwandlung in den ursprünglichen Typ meines Symbols nicht funktioniert.

tl; dr

Wie bekomme ich eine?JComponent, der im Text von aJTextPaneund seine Position aus dem Textfenster?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage