JavaFX TextArea et défilement automatique
Je suis en train d'essayer d'obtenir un TextArea à défilement automatique vers le bas avec un nouveau texte qui est mis en via un gestionnaire d'événement. Chaque nouvelle entrée est juste une longue chaîne de texte à chaque entrée séparée par un saut de ligne. J'ai essayé un changement de gestionnaire, qui définit setscrolltop à Double.MIN_VALUE, mais en vain. Toutes les idées de comment cela pourrait être fait?
source d'informationauteur Sam Keays
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter un écouteur à la
TextArea
élément pour faire défiler vers le bas lorsque sa valeur est modifiée:Mais cet écouteur n'est pas déclenché lorsque vous utilisez le
setText(text)
méthode, donc, si vous voulez déclencher après unsetText(text)
utiliser leappendText(text)
droit après:Ceci ressemble plus à un bug, une fois la
setText()
devrait déclencher lachanged
à l'écoute, mais il ne l'est pas. C'est la solution que j'utilise moi-même et j'espère qu'il vous aide.txa.appendText("") faites défiler vers le bas sans un auditeur. Cela devient un problème si vous souhaitez revenir en arrière, et le texte est constamment mis à jour. txa.setText("") met la barre de défilement en arrière, en haut et le même problème s'applique.
Ma solution a été d'étendre la zone de texte de la classe, ammend le FXML balise à partir de la textArea pour LogTextArea. Où cela fonctionne, il est clair que les causes des problèmes en scène constructeur car il ne sait pas ce que ce composant est
Alternative à cette étrange setText bug sans l'aide de appendText
Un addendum, je voudrais ajouter jamesarbrown la réponse serait à ce qui serait d'utiliser une propriété booléenne à la place de sorte que vous pouvez y accéder à partir de l'intérieur de FXML.
Quelque chose comme cela.
Cependant, le problème avec cette réponse, c'est que si vous obtenez inondé avec de trop grande quantité de commentaires (comme cela peut arriver lors de la récupération d'un journal à partir d'un groupe ar) charge le fil de verrouillage, parce que le TextArea obtient trop de données.