Hervorhebung von Strings in JavaFX TextArea

7

Wir verwenden JavaFXs TextArea -Steuerelement in unserer Anwendung und versuchen, es in Jazzy Rechtschreibprüfungs-API zu integrieren Wenn ein Benutzer ein falsches Wort eingibt, das nicht im Wörterbuch enthalten ist, wird dieses Wort hervorgehoben.

Gibt es eine Möglichkeit, ein Wort in diesem Steuerelement hervorzuheben? Ich habe keine Optionen dafür in den JavaDocs gesehen, also wenn jemand einen Ansatz vorschlagen könnte?

Es könnte möglich sein, dass ich die HTMLEditor -Komponente verwende und die Wörter unterschiedlich mit <font face="red=>wrongWord</font> einfärbe. Dies bringt jedoch eine ganze Reihe anderer Probleme mit der Rechtschreibprüfung mit sich, wie z. B. die HTML-Tags und die Anzahl der Wörter.

    
Marcelo 03.02.2012, 12:16
quelle

4 Antworten

8

Das JavaFX-Steuerelement TextArea (ab 2.0.2) unterstützt keine Rich Text-Bearbeitung, bei der Textstile (Schriftarten usw.) gemischt sind.

Sie können zusammenhängende Zeichenketten in der TextArea markieren, indem Sie den selectRange der TextArea wie im folgenden Beispiel ändern:

%Vor%

Sie können den obigen Code als Grundlage verwenden, um die TextArea in den schreibgeschützten Modus zu versetzen, während die Rechtschreibprüfung stattfindet. Implementieren Sie die Aufforderung, jedes Wort der Reihe nach zu suchen und zu korrigieren, bis die Rechtschreibprüfung abgeschlossen ist. Führen Sie die Eingabeaufforderung in einem separaten Dialogfeld oder in einem separaten Bereich aus. Die Jazzy-Demo scheint so zu funktionieren Ссылка , also sollte es ziemlich einfach sein, ihre Swing-Benutzeroberfläche in JavaFX zu konvertieren.

Alternativ könnten Sie ein JavaFX-WebView-Steuerelement verwenden, um eine der vielen Javascript / HTML-basierten Rechtschreibprüfungen (z. B. Ссылка ) zu verwenden eine Technik, die der hier gezeigten ähnelt: Ссылка .

    
jewelsea 03.02.2012, 21:22
quelle
13

RichTextFX ermöglicht das Hinzufügen von Stil zu Textbereichen.

    
Tomas Mikula 07.10.2013 14:24
quelle
5

Es ist möglich ... irgendwie

Ich weiß, dass diese Frage gelöst ist, aber ich fand einen Weg, das Problem zu beheben, und dachte, ich würde es für andere Leute veröffentlichen, die auch über diesen Beitrag stolpern. Dies ist ein wenig hacky, aber es funktioniert in einer Prise, wenn Sie Text in einer TextArea markieren müssen und nicht die unbefriedigende "unmögliche" Antwort akzeptieren möchten.

  1. Abrufen der Hintergrundfarbe der TextArea und der Vordergrundfarbe der Textschrift
  2. Berechnen Sie den Behälter mit dem höchsten Kontrast zwischen der Vorder- und Hintergrundfarbe
  3. Platziere ein Rechteck um den gewünschten Text
  4. Setzen Sie die Farbe des Rechtecks ​​auf die Hintergrundfarbe
  5. Setzen Sie den Füllmodus des Rechtecks ​​auf den Behälter mit dem höchsten Kontrast
  6. Deaktivieren Sie das Rechteck

Das Rechteck wird jetzt perfekt mit dem Hintergrund verschmelzen, aber die Farbe des Textes ändern. Das Deaktivieren des Rechtecks ​​bedeutet, dass es für den Benutzer nicht mehr als asketisch erscheint - z. B. Aktionen wie das Klicken auf das Rechteck haben keine Überraschungseffekte.

Sie können diese Methode leicht anpassen, wenn eine Vielzahl von Farben gewünscht wird.

Ich kann die Implementierungsdetails veröffentlichen, wenn Leute interessiert sind, skeptisch oder wenn es schwierig ist, zu arbeiten.

    
en_Knight 01.12.2013 05:44
quelle
5

Mit JavaFX 8 können Sie verwenden TextFlow

Sie können bestimmte Stilklassen für fett, rot, grün oder jede Art von Texte und ordnen Sie sie in TextFlow an, während jedem Text die gewünschte Stilklasse zugewiesen wird

    
Ruturaj Patil 29.05.2014 06:42
quelle