GWT-Hacks: Pretty-Print von Code mit RichTextArea während der Eingabe

Problem: Das Widget RichTextArea erlaubt mit der Methode setHTML() das Anzeigen von Text, welcher mit HTML Tags formatiert wurde. Dieses Vorgehen würde theoretisch das Hervorheben von Text während der Eingabe des Benutzer ermöglichen. Allerdings verliert die RhichTextArea mit dem Aufruf der Methode
setHTML()
ihren Focus. Außerdem erlaubt das RichTextArea Widget, im Gegensatz zum TextArea Widget, nicht das Setzen der Curserposition.

Lösung: Von einem RichTextArea Objekt muss als erstes die Methode getFormatter() aufgerufen werden. Auf dem zurückgelieferten Formatter Objekt wird dann die Methode selectAll() aufgerufen und direkt danach die polymorphe Methode insertHTML(). Dieses Vorgehen gewährt beim GWT 2.2, dass die RichTextArea während der Benutzereingabe nicht den Focus verliert, wenn der Inhalt neu gesetzt wird.


SafeHtmlBuilder htmlBuilder = new SafeHtmlBuilder();
htmlBuilder.appendHtmlConstant("Das ist < b >formatiert< / b >!");
textarea.getFormatter().selectAll();
textarea.getFormatter().insertHTML(htmlBuilder.toSafeHtml ().asString());
htmlBuilder=new SafeHtmlBuilder()

Für einen Pretty-Print von XML oder JavaScript während der Eingabe muss dem SafeHtmlBuilder natürlich der eingegebene und mit entsprechenden Html-Tags zur Hervorhebung ergänzte Text des RhichTextArea Widgets übergeben werden. Das „Scannen“ nach XML/JavaScript Befehlen erledigt man am besten mit JavaScript Code den man mittels JSNI direkt in den JavaCode einbindet.

Nachteil: Der Curser wird bei jedem Aktualisierungsvorgang ans Ende des Textes gesetzt. Ein Ändern des Textes an einer beliebigen Position ist damit nicht wirklich möglich.

Dieser Beitrag wurde unter Allgemein abgelegt und mit , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Die Kommentarfunktion ist geschlossen.