Swing Document-Structure; Element

Status
Nicht offen für weitere Antworten.

diggaa1984

Top Contributor
hiho,

ich habe schon länger versucht herauszubekommen, welche Textabschnitte ich mit
public interface Element#getElement(int index)
in meinem DefaultStyledDocument immer bekomme.
Momentan nutze ich
Java:
Element root = this.getDefaultRootElement()
root.getElement(root.getElementIndex(startOffset)).getStartOffset()
und bekomme damit den Zeilenanfangsoffset, welcher zum übergebenen offset gehört, aber das war mehr geraten/probiert etc. Gibt es in der API oder sonst wo eine Möglichkeit die interne Struktur solcher Dcouments anzuschauen?
 
Hoi.
Also ich beschäftige mich derzeit auch etwas mit dem javax.swing.text.Document, aber habe auf deine Frage keine direkte Antwort.
In der API gibt es zwar hübsche Bildchen, aber kA ob die dir weiterhelfen 😉
Ich habe aber gesehen, dass das Document und Element Getter-Methoden zum durchlaufen der Struktur hat. Ich habe es selbst nie gemacht, aber im Grunde erreicht man darüber alle Elemente im Dokument. Ob man nun deren Hierarchie (die baumähnlich ist) verstehen oder nachvollziehen kann, ist was anderes. In dem Punkt kann ich dir leider nicht weiterhelfen. Ich denke es variiert auch start zwischen den Document-Implementierungen.

Aber z.B. rekursiv müsste man die Elementstruktur anschauen können:

Java:
Element[] roots = myDocument.getRootElements();
for (Element elem : roots)
    printElement( elem );

//...

void printElement(Element elem)
{
    if (elem == null)
        return;

    // hier elem irgendwie ausgeben / anschauen ...

    // Rekursion
    for (int i = 0; i < elem.getElementCount(); i++)
        printElement( elem.getElement(i) );
}
...betrachte es bitte als Pseudocode 🙂
 
hm ich habe eine Seite gefunden in der die Hierarchie für StyledDocuments erklärt wird:
Core Swing advanced programming: Google Book

grob:
Code:
<section>
    <paragraph diverseAttribute >    <!-- erste zeile >
    <content> [startOffset,endOffset][text]    <!-- erste zeile, erster teil >
    <content> [startOffset,endOffset][text]    <!-- erste zeile, zweiter teil >
    <paragraph diverseAttribute>     <!-- zweite zeile >
    <content> [startOffset,endOffset][text]    <!-- zweite zeile, komplett >
</section>

paragraph = BranchElement
content = LeafElement

ich frage mich grad (und suche eigentlich auch), ob ich mit einer gegebenen Methode direkt auf die content-elemente zugreifen kann, wenn ich einen offset gegeben habe. Irgendwie erwische ich intern immer nur paragraphs, also komplette Zeilen. Ich wollte aber nich noch zusätzlich erst das child suchen was dem offset am nächsten kommt.

sowas wie getNearestLeafElement(int offset) 😀
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben