prevenir que la tecla de retroceso elimine caracteres en un área de texto javafx
Estoy tratando de evitar que la tecla de retroceso elimine caracteres en un área de texto de JavaFX. KeyEvent.consume
debería hacer esto, pero no evita que ocurra el evento de tecla. Sí establece la propiedad del evento de tecla y KeyEvent.isConsumed()
devuelve verdadero después de consumir el evento. Sin embargo, la tecla de retroceso aún se ejecuta. Intenté con otras teclas y el efecto es el mismo.
Este es mi clase fxcontroller actual:
public class Terminal {
@FXML
private TextArea ta_console;
@FXML
private AnchorPane ap_main;
@FXML
protected void initialize(){
ta_console.setText(">");
ta_console.positionCaret(1);
}
public void keyStroke(KeyEvent keyEvent) {
if (keyEvent.getCode() == KeyCode.BACK_SPACE || keyEvent.getCode() == KeyCode.DELETE) {
keyEvent.consume();
}
}
}
El método keyStroke
se ejecuta cuando se presiona una tecla en el área de texto. ¿Me estoy perdiendo algo o consume
tiene algún error o no funciona de la forma en que dice la documentación? ¿Hay alguna forma de obtener el resultado deseado?
davy.ai
Parece que el método
consume
no está evitando que la tecla de retroceso elimine los caracteres en tuTextArea
. Una solución alternativa que puedes intentar es establecer la propiedadtext
deTextArea
al texto actual menos el último carácter cuando se presione la tecla de retroceso. Aquí tienes un ejemplo:Este código verifica si se presionó la tecla de retroceso y obtiene el texto actual en
TextArea
. Luego obtiene la posición actual del caret y crea una nuevaString
que es el texto actual menos el último carácter. Finalmente, establece la propiedadtext
deTextArea
al nuevo texto y establece la posición del caret en la posición anterior menos uno para tener en cuenta el carácter eliminado. De esta manera, la tecla de retroceso no elimina los caracteres y, en su lugar, solo mueve la posición del caret hacia atrás un carácter.