hallo,
ich arbeite zur Zeit daran das Syntaxhighlighting für meinen Editor einzubaun, und bin gerade dabei die Funktion dafür im Document zu implementieren. Das Document muss bei insertString gemäß bekannter Strings (Schluesselwörter, Klammern etc.) die Attribute des eingefügten Textes durch vom Nutzer definierte Styles ersetzen.
ich habe, um es erstmal zu testen, so gemacht, dass ich jeweils den kompletten Inhalt des Documentes noch einmal analysiere. Ich weiss, dass es nicht wirklich schön ist sobald der Inhalt des Documentes umfangreicher wird, aber zu Testzweckens ob diese Ersetzungen überhaupt funktionierens ging es damit am schnellsten.
Das Problem dabei ist nun, dass der Cursor immer ans Ende des Documentes springt egal wo ich gerade neuen Text eintippe. Mir ist klar woran das liegt ... ich füge ja quasi den gesamten Text des Documentes erneut ein und somit bekommen die DocumentListener (JTextPane in meinem Fall) die Information eines Offsets von 0 und einer Textlänge die bis zum Ende des Documentes reicht. Die Listener setzen nun den Cursor ans Ende des eingefügten Textes.
Gibt es eine Möglichkeit den Listener glauben zu lassen, dass an Stelle xy es eingefügt wurde und somit die Cursorposition korrigiert wird? Ein insertString mit "" funktioniert nicht, das wird im AbstractDocument oder im DefaultStyledDocument abgefangen und kommt gar nicht erst bis zu den Listenern durch.
Was ich mich auch frage:
Wenn ich nicht jedesmal den kompletten Text des Documentes erneut mit Attributen versehe, dann kann es ja trotzdem passieren das ich nachfolgenden Text, hinter der aktuellen Cursorposition ändern muss (bspw habe ich an Offset 0 ein Schlüsselwort fett dargestellt, und schreibe nun etwas direkt vor dieses Schlüsselwort. Aufgrund dessen das mein Parser das Schlüsselwort eh nicht mehr direkt erkennen kann, würde ich nun das den kompletten String mit Standardwerten darstellen, das heisst das Schlüsselwort muss nachträglich wieder normal dargestellt werden. Das wäre hinter der aktuellen insert-Position. Dabei darf sich ber der Cursor nicht gleich ans Ende vom Schlüsselwort bewegen.) Aber wie würde ich das machen können?
Ich hoffe ihr wisst in etwa was mein Problem ist
Code an sich sollte eigentlich nicht notwendig sein, er funktioniert ja soweit abgesehen davon das eben die Cursorposition nachträglich korrigiert werden müsste ^^
ich arbeite zur Zeit daran das Syntaxhighlighting für meinen Editor einzubaun, und bin gerade dabei die Funktion dafür im Document zu implementieren. Das Document muss bei insertString gemäß bekannter Strings (Schluesselwörter, Klammern etc.) die Attribute des eingefügten Textes durch vom Nutzer definierte Styles ersetzen.
ich habe, um es erstmal zu testen, so gemacht, dass ich jeweils den kompletten Inhalt des Documentes noch einmal analysiere. Ich weiss, dass es nicht wirklich schön ist sobald der Inhalt des Documentes umfangreicher wird, aber zu Testzweckens ob diese Ersetzungen überhaupt funktionierens ging es damit am schnellsten.
Das Problem dabei ist nun, dass der Cursor immer ans Ende des Documentes springt egal wo ich gerade neuen Text eintippe. Mir ist klar woran das liegt ... ich füge ja quasi den gesamten Text des Documentes erneut ein und somit bekommen die DocumentListener (JTextPane in meinem Fall) die Information eines Offsets von 0 und einer Textlänge die bis zum Ende des Documentes reicht. Die Listener setzen nun den Cursor ans Ende des eingefügten Textes.
Gibt es eine Möglichkeit den Listener glauben zu lassen, dass an Stelle xy es eingefügt wurde und somit die Cursorposition korrigiert wird? Ein insertString mit "" funktioniert nicht, das wird im AbstractDocument oder im DefaultStyledDocument abgefangen und kommt gar nicht erst bis zu den Listenern durch.
Was ich mich auch frage:
Wenn ich nicht jedesmal den kompletten Text des Documentes erneut mit Attributen versehe, dann kann es ja trotzdem passieren das ich nachfolgenden Text, hinter der aktuellen Cursorposition ändern muss (bspw habe ich an Offset 0 ein Schlüsselwort fett dargestellt, und schreibe nun etwas direkt vor dieses Schlüsselwort. Aufgrund dessen das mein Parser das Schlüsselwort eh nicht mehr direkt erkennen kann, würde ich nun das den kompletten String mit Standardwerten darstellen, das heisst das Schlüsselwort muss nachträglich wieder normal dargestellt werden. Das wäre hinter der aktuellen insert-Position. Dabei darf sich ber der Cursor nicht gleich ans Ende vom Schlüsselwort bewegen.) Aber wie würde ich das machen können?
Ich hoffe ihr wisst in etwa was mein Problem ist
Code an sich sollte eigentlich nicht notwendig sein, er funktioniert ja soweit abgesehen davon das eben die Cursorposition nachträglich korrigiert werden müsste ^^
Zuletzt bearbeitet: