Подсветка строк в JavaFX textarea в

мы используем управление в нашем приложении, и пытается интегрировать его с Jazzy проверка орфографии API-как в, когда пользователь вводит неправильное слово, которого нет в словаре, такое слово будет выделено.

есть ли способ, чтобы выделить слово в контроле? Я не видел вариантов для этого в JavaDocs, поэтому, если кто-то может предложить подход?

можно было бы, я думаю, использовать HTMLEditor компонент и цвет слова diferently с <font face="red=>wrongWord</font>. Это, однако, приносит много разных проблем с проверкой орфографии, таких как HTML-теги и количество слов.

4 ответов


элемент управления JavaFX TextArea (начиная с 2.0.2) не поддерживает редактирование расширенного текста, где смешиваются текстовые стили (шрифты и т. д.).

вы можете выделить непрерывные строки символов в TextArea, манипулируя selectRange TextArea, как в следующем примере:

public class TextHighlight extends Application {
  public static void main(String[] args) { Application.launch(args); }
  @Override public void start(Stage stage) {
    final TextArea text = new TextArea("Here is some textz to highlight");
    text.setStyle("-fx-highlight-fill: lightgray; -fx-highlight-text-fill: firebrick; -fx-font-size: 20px;");
    text.setEditable(false);
    text.addEventFilter(MouseEvent.ANY, new EventHandler<MouseEvent>() {
      @Override public void handle(MouseEvent t) { t.consume(); }
    });

    stage.setScene(new Scene(text));
    stage.show();

    Platform.runLater(new Runnable() {
      @Override public void run() { text.selectRange(13, 18); }
    });
  }
}

вы можете использовать приведенный выше код в качестве основы для переключения TextArea в режим только для чтения во время проверки орфографии. Реализовать запрос на поиск и исправление каждого слова по очереди до проверка орфографии завершена. Выполните запрос в отдельном диалоговом окне или панели. Jazzy демо, кажется, работает таким образомhttp://jazzy.sourceforge.net/demo.html, поэтому должно быть довольно легко преобразовать его Swing UI в JavaFX.


кроме того, вы можете использовать элемент управления JavaFX WebView для обертывания любого из многих JavaScript/html-шашек орфографии (например,http://www.javascriptspellcheck.com/) используя метод, подобный тому, что показано здесь: http://jewelsea.wordpress.com/2011/12/11/codemirror-based-code-editor-for-javafx/.


RichTextFX позволяет добавлять стиль в текстовые диапазоны.


это возможно... вроде

Я знаю, что этот вопрос решен, но я нашел способ исправить проблему и подумал, что опубликую его для других людей, которые также наткнутся на этот пост. Это немного хаки, но он работает в крайнем случае, если вам нужно выделить текст в текстовом поле и не хотите принимать неудовлетворительный "невозможный" ответ.

  1. получить цвет фона TextArea и цвет переднего плана текста шрифт
  2. вычислить бин наибольшего контраста между цветом переднего плана и фона
  3. поместите прямоугольник вокруг нужного текста
  4. установить цвет прямоугольника в цвет фона
  5. установите blendmode прямоугольника в ячейку наивысшего контраста
  6. отключить прямоугольника

прямоугольник теперь будет идеально сочетаться с фоном, но изменить цвет текста. Отключение прямоугольника означает, что для пользователя это будет выглядеть как нечто большее, чем аскетическое.g такие действия, как нажатие на прямоугольник, не будут иметь неожиданного эффекта.

вы можете слегка настроить этот метод, если требуется множество цветов.

Я могу опубликовать детали реализации, если люди заинтересованы, скептически, или если это сложно получить работу.


с JavaFX 8 вы можете использовать Textflow в

вы можете определить определенные классы стилей для полужирного, красного, зеленого или любого типа текст и расположить их в TextFlow при назначении желаемого класса стиля для каждого текста