Faire un JScrollPane automatiquement défiler tout le chemin vers le bas
Je suis en train de mettre en œuvre un JScrollPane avec un JTextArea. Le JTextArea est annexé à la, et je veux le JScrollPane pour garder le défilement vers le bas comme de plus en plus de l'ajout de texte. Comment cela peut-il être atteint?
Avant JDK5, vous devez modifier manuellement le curseur de position après chaque ajout. Vous pouvez maintenant donner à ce comportement par défaut comme ceci :
L'avantage, c'est que vous n'avez pas besoin d'utiliser cette extrait plus d'une fois dans votre code!
+1 Le setUpdatePolicy() API explique si, beaucoup. J'ai mis à jour ma réponse à la cité de la question en conséquence. Oui, l'API ne cesse de changer son dur pour suivre l'évolution de tous les temps. Cela aide, mais si l'utilisateur clique n'importe où autre que après la fin de la dernière ligne de l'auto de défilement s'arrête. Ce n'est pas intuitif. Ce serait bien si le comportement habituel travaillé, simplement en faisant défiler vers le bas la fonction de défilement automatique est réactivé. Découvrez Smart Défilement pour une autre solution. Pour résoudre ce problème, j'ai ajouté un bouton qui, lorsqu'il est cliqué, activé le défilement automatique de nouveau. Le code pour le bouton que le besoin de cette: textArea.setCaretPosition(textArea.getDocument().getLength());
Votre "solution" est en fait le problème de la liés à la question: si vous avez manuellement essayez de déplacer le défilement verticale de la poignée, ce code faites défiler vers le bas encore une fois!
Un travail autour est possible: vous pouvez déclarer que auditeur en tant que classe, puis instancier sur le cas où il est nécessaire. Après quoi, vous pouvez supprimer la classe après avoir forcé une mise à jour de l'écran. Fonctionne comme un charme.
La solution retenue les bonnes œuvres, mais uniquement lorsque la zone de texte est modifiable, c'est à dire sans jTextArea.setEditable(false) . La solution proposée par Krigath est plus général, mais le problème posé ici JScrollPane et JList défilement automatique. À l'aide des réponses de cette question, vous pouvez obtenir la solution générale, par exemple:
Le Volet, puis défile vers le bas uniquement lorsque la barre de défilement verticale est en pleine expansion, en réponse à ajouté des lignes de texte.
J'avoue qu'une méthode pour filtrer les événements sans variables supplémentaires pourrait être trouvé, et apprécierais si quelqu'un à la poste.
(Ce que je pense) une simple réponse découvrez: Zone De Texte Défilant.
setUpdatePolicy()
API explique si, beaucoup. J'ai mis à jour ma réponse à la cité de la question en conséquence.Oui, l'API ne cesse de changer son dur pour suivre l'évolution de tous les temps.
Cela aide, mais si l'utilisateur clique n'importe où autre que après la fin de la dernière ligne de l'auto de défilement s'arrête. Ce n'est pas intuitif. Ce serait bien si le comportement habituel travaillé, simplement en faisant défiler vers le bas la fonction de défilement automatique est réactivé.
Découvrez Smart Défilement pour une autre solution.
Pour résoudre ce problème, j'ai ajouté un bouton qui, lorsqu'il est cliqué, activé le défilement automatique de nouveau. Le code pour le bouton que le besoin de cette: textArea.setCaretPosition(textArea.getDocument().getLength());
OriginalL'auteur camickr
J'ai trouvé la réponse ici:
JScrollPane et JList défilement automatique
OriginalL'auteur Krigath
Si vous êtes constamment l'écriture de données, vous pouvez utiliser:
juste après que vous ajoutez de nouvelles données.
Ce serait automatiquement défiler tout le chemin vers le bas de la JScorllPane.
+1 pour le bon travail.
OriginalL'auteur Harold Martin
Voici la solution.
+1 pour la réponse correcte - même si c'est le même que le Rob accepté de répondre 🙂
OriginalL'auteur Jeevan B. Manoj
Un travail autour est possible: vous pouvez déclarer que auditeur en tant que classe, puis instancier sur le cas où il est nécessaire. Après quoi, vous pouvez supprimer la classe après avoir forcé une mise à jour de l'écran. Fonctionne comme un charme.
OriginalL'auteur Primark
Ma solution
(PS: Modifier pour la copie d'ÉCRAN)
OriginalL'auteur Yusuf Kalsen
La solution retenue les bonnes œuvres, mais uniquement lorsque la zone de texte est modifiable, c'est à dire sans
jTextArea.setEditable(false)
. La solution proposée par Krigath est plus général, mais le problème posé ici JScrollPane et JList défilement automatique. À l'aide des réponses de cette question, vous pouvez obtenir la solution générale, par exemple:Le Volet, puis défile vers le bas uniquement lorsque la barre de défilement verticale est en pleine expansion, en réponse à ajouté des lignes de texte.
J'avoue qu'une méthode pour filtrer les événements sans variables supplémentaires pourrait être trouvé, et apprécierais si quelqu'un à la poste.
OriginalL'auteur user9999