Resaltar cadenas en JavaFX TextArea

Estamos utilizando el control TextArea de JavaFX en nuestra aplicación, e intentamos integrarlo con la API Jazzy Spell Check. De esta manera, cuando un usuario ingresa una palabra incorrecta que no está en el diccionario, dicha palabra se resaltará.

¿Hay alguna manera de resaltar una palabra en dicho control? No he visto opciones para eso en los JavaDocs, entonces, ¿alguien podría sugerir un enfoque?

Podría ser posible, supongo, utilizar el componente HTMLEditor y colorear las palabras de forma diferente con wrongWord . Esto, sin embargo, trae muchos problemas diferentes con la revisión ortográfica, tales como las tags html y las palabras cuentan.

El control JavaFX TextArea (a partir de 2.0.2) no es compatible con la edición de texto enriquecido donde los estilos de texto (fonts, etc.) están mezclados.

Puede resaltar cadenas contiguas de caracteres en el área de texto manipulando SelectRange de TextArea, como en el siguiente ejemplo:

 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() { @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); } }); } } 

Puede usar el código anterior como base para cambiar el área de texto a modo de solo lectura mientras se lleva a cabo la corrección ortográfica. Implemente indicaciones para buscar y corregir cada palabra por turno hasta que se complete la revisión ortográfica. Realice las indicaciones en un cuadro de diálogo o panel por separado. La demo de Jazzy parece funcionar de esta manera http://jazzy.sourceforge.net/demo.html , por lo que debería ser bastante fácil convertir su UI Swing a JavaFX.


Alternativamente, puede usar un control JavaFX WebView para ajustar cualquiera de los muchos correctores de ortografía basados ​​en javascript / html (por ejemplo, http://www.javascriptspellcheck.com/ ) usando una técnica similar a la que se muestra aquí: http: // jewelsea. wordpress.com/2011/12/11/codemirror-based-code-editor-for-javafx/ .

RichTextFX le permite agregar estilo a los rangos de texto.

Es posible … algo así como

Sé que esta pregunta está resuelta, pero encontré una forma de solucionar el problema y pensé que lo publicaría para otras personas que también se tropiecen con esta publicación. Esto es un poco hacky, pero funciona en caso de necesidad si necesita resaltar texto en un TextArea y no quiere aceptar la respuesta insatisfactoria “imposible”.

  1. Recupere el color de fondo de TextArea y el color de primer plano de la fuente de texto
  2. Calcule el contenedor de mayor contraste entre el primer plano y el color de fondo
  3. Coloque un rectángulo alrededor del texto deseado
  4. Establezca el color del rectángulo en el color de fondo
  5. Establezca el modo de combinación del rectángulo en el contenedor de mayor contraste
  6. Deshabilitar el rectángulo

El rectángulo ahora se combinará perfectamente con el fondo pero cambiará el color del texto. Desactivar el rectángulo significa que no aparecerá como algo más que ascético para el usuario, por ejemplo, acciones como hacer clic en el rectángulo no tendrán ningún efecto sorpresa.

Puede modificar ligeramente este método si desea una variedad de colores.

Puedo publicar los detalles de la implementación si las personas están interesadas, escépticas o si es complicado trabajar.

Con JavaFX 8 puede usar TextFlow

Puede definir ciertas clases de estilo para negrita, rojo, verde o cualquier tipo de texto y organizarlas en TextFlow mientras asigna la clase de estilo deseada a cada texto.

    Intereting Posts