Destaque de Strings no TextFore do JavaFX

Estamos usando o controle TextArea do JavaFX em nosso aplicativo, e tentando integrá-lo com a API Jazzy Spell Check – como em, quando um usuário digita uma palavra errada que não está no dictionary, essa palavra seria destacada.

Existe uma maneira de destacar uma palavra no dito controle? Eu não vi nenhuma opção para isso nos JavaDocs, então, se alguém pudesse sugerir uma abordagem?

Pode ser possível, eu acho, usar o componente HTMLEditor e colorir as palavras diferentemente com wrongWord . Isso, no entanto, traz muitos problemas diferentes com a correção ortográfica, como como as tags e palavras html contam.

    O controle TextArea do JavaFX (a partir de 2.0.2) não oferece suporte à edição de rich text em que estilos de texto (fonts, etc.) são misturados.

    Você pode realçar cadeias de caracteres contíguas de caracteres no TextArea, manipulando o selectRange do TextArea, como no exemplo a seguir:

     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); } }); } } 

    Você pode usar o código acima como base para alternar o TextArea para o modo somente leitura enquanto a verificação ortográfica está acontecendo. Implemente a solicitação para localizar e corrigir cada palavra por vez até que a verificação ortográfica seja concluída. Execute o aviso em um diálogo ou painel separado. A demo do Jazzy parece funcionar desta forma http://jazzy.sourceforge.net/demo.html , portanto, deve ser bastante fácil converter sua UI do Swing para o JavaFX.


    Como alternativa, você poderia usar um controle JavaFX WebView para agrupar qualquer um dos muitos verificadores ortocharts baseados em javascript / html (por exemplo, http://www.javascriptspellcheck.com/ ) usando uma técnica semelhante à que é demonstrada aqui: http: // jewelsea. wordpress.com/2011/12/11/codemirror-based-code-editor-for-javafx/ .

    RichTextFX permite que você adicione estilo a intervalos de texto.

    É possível … uma espécie de

    Sei que esta questão está resolvida, mas encontrei uma maneira de corrigir o problema e pensei em publicá-lo para outras pessoas que também se deparam com esse post. Isso é um pouco hacky, mas funciona em um piscar de olhos se você precisar realçar o texto em uma TextArea e não quiser aceitar a resposta “impossível” insatisfatória.

    1. Recuperar a cor do plano de fundo da TextArea e a cor do primeiro plano da fonte do texto
    2. Calcule o escaninho de maior contraste entre a cor de primeiro e segundo plano
    3. Coloque um retângulo ao redor do texto desejado
    4. Definir a cor do retângulo para a cor de fundo
    5. Defina o modo de mesclagem do retângulo para o compartimento de maior contraste
    6. Desativar o retângulo

    O retângulo agora se misturará perfeitamente ao plano de fundo, mas mudará a cor do texto. Desabilitar o retângulo significa que ele não aparecerá como algo mais que ascético para o usuário – por exemplo, ações como clicar no retângulo não terão nenhum efeito surpresa.

    Você pode ajustar levemente este método se desejar uma variedade de colors.

    Eu posso postar os detalhes da implementação se as pessoas estiverem interessadas, céticas ou se for complicado trabalhar.

    Com o JavaFX 8 você pode usar o TextFlow

    Você pode definir certas classs de estilo para negrito, vermelho, verde ou qualquer tipo de texto e organizá-las no TextFlow enquanto atribui a class de estilo desejada a cada texto.