Swing JEditorPane: Text formatieren

MichaelGER

Mitglied
Hallo,

ich habe ein Objekt, welches eine Beschreibung mit HTML Tags enthält (die Beschreibung wird über ein JEditorPane eingegeben). Ich möchte dem Nutzer ermöglichen den Text, durch markieren und Button drücken, zu formatieren, also einfache Dinge wie fett, farbig, etc. Dies geschieht ebenfalls über ein JEditorPane (wegen HTML).

Jetzt habe ich aber ein Problem. Ich weiß nicht wirklich wie ich den selektierten Text mit den entsprechenden Tags versehen soll. Natürlich durch einfügen der Tags in den Text, aber das Problem ist eher, dass ich die Methode getSelectedText() nicht anwenden kann, weil es den Text eventuell öfter in der Beschreibung gibt. In Kombination mit replace() (neuer Text + Tags) hätte das schlechte Nebenwirkungen.

Die Methode getSelectedStart()/getSelectedEnd() bringt mir leider auch nichts, da sich dieser Wert auf den Text an sich bezieht und die HTML Tags dabei nicht beachtet werden. Im String (egal ob es sich um die Beschreibung handelt, oder den Rückgabewert von getText()) werden die HTML Tags mitgezählt, was die Differenz zum JEditorPane ausmacht.

So langsam gehen mir die Ideen aus...
Habt ihr eventuell Vorschläge, wie ich das machen könnte? Ein formatierter Text ist halt schon hilfreich um Informationen hervorzuheben.
 
Jetzt habe ich aber ein Problem. Ich weiß nicht wirklich wie ich den selektierten Text mit den entsprechenden Tags versehen soll. Natürlich durch einfügen der Tags in den Text, aber das Problem ist eher, dass ich die Methode getSelectedText() nicht anwenden kann, weil es den Text eventuell öfter in der Beschreibung gibt. In Kombination mit replace() (neuer Text + Tags) hätte das schlechte Nebenwirkungen.

hi,

also nach 3x lesen hab ich sogar verstanden was du da meintest 🙂 ..
als Bsp:

<strong>foo</strong>
foo
<strong>foo</strong>

du hast nun bedenken das quasi auch das 2. "foo" obwohl keine tags drum sind entsprechend manipuliert wird!?

da du in dem angestrebten vorgehen eh den gesamten text analysieren müsstest auf Vorkommen des markierten Wortes, kannst du dir doch dynamisch nen RegExp-Pattern basteln, was dann auf den kompletten Text losgelassen wird. Nicht grad performant, denke ich, aber wirksam.
 
Hallo,
erstmal danke für deine Antwort.

du hast nun bedenken das quasi auch das 2. "foo" obwohl keine tags drum sind entsprechend manipuliert wird!?.

wenn ich zum Beispiel replace("hallo", "tschüss") mache, ersetzt der mir alle hallo, welche im Text vorkommen, durch tschüss. Aber ich denk mal kaum, dass der Nutzer alle hallos ersetzen möchte, sondern nur das gerade markierte.

da du in dem angestrebten vorgehen eh den gesamten text analysieren müsstest auf Vorkommen des markierten Wortes, kannst du dir doch dynamisch nen RegExp-Pattern basteln, was dann auf den kompletten Text losgelassen wird. Nicht grad performant, denke ich, aber wirksam.

Ok, hätte nicht gedacht, dass so ein kleines Feature so ein Aufwand braucht. Naja, was tut man nicht alles für die kleinen Dinge, die das Leben schöner machen :bae:
 

Zurück
Oben