es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo cambiar solo el color del último carácter en un TextField de JavaFX.

Estoy intentando crear un juego de mecanografía, he creado un campo de texto para la entrada del usuario y estoy tratando de hacer que el último carácter del campo de texto se muestre en rojo si no coincide con el carácter correspondiente en las palabras a ser escritas. A continuación se muestra lo que tengo hasta ahora junto con los tipos actuales de los nodos relevantes.

Label palabrasAEscribir = new Label();
TextField entradaUsuario = new TextField();
StringBuilder palabrasEscritas = new StringBuilder();
TextField ultimoCaracter = new TextField();

`entradaUsuario.setOnKeyReleased(e -> {
palabrasEscritas.append(entradaUsuario.getText()); // palabrasEscritas es un StringBuilder de lo que hay en entradaUsuario

if (palabrasEscritas.toString().charAt(palabrasEscritas.length() - 1) - palabrasAEscribir.getText().charAt(palabrasEscritas.length() - 1) != 0) {
    ultimoCaracter.setText(e.getText());
    ultimoCaracter.setStyle("-fx-text-fill: red; -fx-font-size: 16px;");
    palabrasEscritas.setLength(palabrasEscritas.length() - 1); // elimina el último carácter de palabrasEscritas
    entradaUsuario.setText(palabrasEscritas.toString() + ultimoCaracter.getText());
    entradaUsuario.end();
}
palabrasEscritas.delete(0, palabrasEscritas.length());

});
“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para hacer que el último carácter se ponga en rojo en el campo de texto cuando no coincide con el carácter correspondiente en las palabras a ser escritas, puedes usar el siguiente fragmento de código:

    if (userInput.getText().length() > 0 && wordsToType.getText().length() > 0) {
        char lastTypedChar = userInput.getText().charAt(userInput.getText().length() - 1);
        char correspondingChar = wordsToType.getText().charAt(userInput.getText().length() - 1);
        if (lastTypedChar != correspondingChar) {
            String textBeforeLastChar = userInput.getText().substring(0, userInput.getText().length() - 1);
            String lastCharText = userInput.getText().substring(userInput.getText().length() - 1);
            lastChar.setText(lastCharText);
            lastChar.setStyle("-fx-text-fill: red; -fx-font-size: 16px;");
            userInput.setText(textBeforeLastChar + lastCharText);
            userInput.end();
        }
    }
    

    El código verifica si hay al menos un carácter en el campo de texto y en las palabras a ser escritas. Si los hay, se obtiene el último carácter que el usuario ha tecleado y el carácter correspondiente de las palabras que deben ser escritas. Si estos dos caracteres no son iguales, se establece el texto del campo de texto lastChar como el último carácter tecleado por el usuario, se establece su estilo en rojo, y luego se reemplaza el último carácter en el campo de texto de entrada del usuario con este campo de texto lastChar. Esto asegura que solo el último carácter esté en rojo y no todo el texto en el campo.

    Nota: Los campos de texto wordsTyped y lastChar no se utilizan en este fragmento de código y se pueden eliminar a menos que sean necesarios para otras partes del juego.

Comments are closed.