Comment définir le défilement automatique de JTextArea dans l’interface graphique Java?

J’ai incorporé un JTextArea sur un JScrollPane et j’utilise ce JTextArea pour la sortie.

Je veux que chaque fois que la sortie dépasse la taille du JTextArea, le JTextArea défile automatiquement pour que l’utilisateur n’ait pas à faire de défilement manuel pour voir la sortie récente.

Comment puis je faire ça?

J’ai déjà défini la propriété autoscroll de JTextArea et JScrollPane sur true.

Lorsque vous utilisez JDK1.4.2 (ou une version antérieure), la suggestion la plus courante que vous trouverez dans les forums est d’utiliser le code suivant:

textArea.append(...); textArea.setCaretPosition(textArea.getDocument().getLength()); 

Cependant, je viens de remarquer que dans JDK5, ce problème a été résolu par une modification de l’API. Vous pouvez maintenant contrôler ce comportement en définissant une propriété sur le DefaultCaret de la zone de texte. En utilisant cette approche, le code serait:

 JTextArea textArea = new JTextArea(); DefaultCaret caret = (DefaultCaret)textArea.getCaret(); caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); 

Une description plus détaillée de ce sujet peut être trouvée ici: Défilement de la zone de texte

  JScrollBar vbar = scrollPane.getVerticalScrollBar(); for (int i = 0; i < 20; i++) { myJTxt.append("This is text " + i + "\n"); vbar.setValue(vbar.getMaximum()); vbar.paint(vbar.getGraphics()); myJTxt.scrollRectToVisible(myJTxt.getVisibleRect()); myJTxt.paint(myJTxt.getGraphics()); try { Thread.sleep(250); } catch (InterruptedException ex) { Logger.getLogger(ScrollTextView.class.getName()).log(Level.SEVERE, null, ex); } } 

Lorsque vous cliquez n’importe où sur JTextArea, le défilement automatique peut être arrêté. Parce que la position du caret a changé une fois, le sharepoint vue a également changé. Dans ce temps, vous devez définir la position du caret lorsque vous ajoutez ou ajoutez du texte. Sur mon chemin, j’ai fait la méthode, y compris définir la position du caret, puis l’utiliser lorsque quelque chose à append ou à append.

  JTextArea jTextArea = new JTextArea(); DefaultCaret caret = (DefaultCaret)jTextArea.getCaret(); caret.setUpdatePolicy(DefaultCaret.OUT_BOTTOM); 

Utilisez ceci à la place

 JTextArea textArea = new JTextArea(); DefaultCaret caret = (DefaultCaret)textArea.getCaret(); caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); scrollPane = new JScrollPane(); scrollPane.add(textArea); scrollPane.setViewportView(textArea); 

Essaye ça:

 JTextArea jTextArea = new JTextArea(); JScrollPane jScrollPane = new JScrollPane(); jScrollPane.setViewport(jTextArea);