2017-04-23 1 views
0

Quelque chose comme "onTextDeleted (String deletedText)" ou une propriété, textProperty n'aide pas beaucoup. Je peux faire des choses comme sauvegarder le caretPosition avant que quelque chose ne soit supprimé (retour arrière, supprimer ou chaque fois que selectedText est écrasé) et à l'intérieur du textProperty utiliser currentCaretPosition et faire une sous-chaîne (currentCaretPosition, savedCaretPositionBeforeDelete) .contains (";") de l'ancienne valeur ou viceversa si la sélection de texte a été faite à rebours. Je veux dire, cela ne semble pas très pratique, et c'est ce que je fais actuellement. J'ai regardé dans le getUndoManager() mais theres aucun accès à l'undoList(). BTW j'utilise RichtextFX de Tomas Mikula. TextFormatter peut gérer et contrôler les modifications de TextInputControl.JavaFX t̶e̶x̶t̶a̶r̶e̶a̶ Événement CodeArea sur un caractère spécifique supprimé

Répondre

0

Ceci est une approche pour les composants étend TextInputControl de JavaFX.

textArea.setTextFormatter(new TextFormatter<String>(change -> { 
    if (change.isDeleted() || change.isReplaced()) { 
     System.out.println("Text removal: " + change.getControlText().substring(change.getRangeStart(), change.getRangeEnd())); 
     System.out.println("Text additional: " + change.getText()); 
     System.out.println("CaretPosition current: " + change.getControlCaretPosition()); 
     System.out.println("CaretPosition to: " + change.getCaretPosition()); 

     // change.setCaretPosition(position); 
    } 
    return change; 
})); 

Voir TextFormatter.Change: API Document pour plus de détails.

+0

Il n'y a pas de méthode setTextFormatter() disponible pour CodeArea, c'est ma faute pour le titre trompeur. –

+0

Désolé, ma réponse était une solution pour les contrôles étend le 'TextInputControl' de JavaFX. 'CodeArea' de RichtextFX semble être un composant scratch. – monolith52