Ich habe hier eine einfache Java-Frage. Ich möchte den automatischen Textscrollvorgang bis zum Anfang der letzten Zeile eines mit JTextArea erstellten Textbereichs durchführen. Die Textmenge pro Zeile des Textbereichs ist länger als die Breite des Textbereichs.Automatischer Textscroll für Textbereich (JTextArea) mit Caret-Position an den Anfang der letzten Zeile gesetzt
Hier ist das Code-Snippet, das ich verwendet habe, um das einzurichten.
JTextArea textArea = new JTextArea();
DefaultCaret caret = (DefaultCaret)textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
Das Problem ist jetzt, mit dem obigen Code, ist das Standardverhalten, dass die caret Auto bis zum Ende des Dokuments positioniert ist, als Ergebnis erhält der Anfangsteil des gesamten Textbereiches Umfang aus . Ich würde es vorziehen, dass der automatische Bildlauf am Anfang der letzten Zeile im Dokument stattfindet.
Um deutlich zu machen, hier sind zwei Screenshots,
Was ich will, ist die erste, aber ist das, was passiert, die zweite.
Coole Lösung! Aber ich habe eine Frage hier. Gibt es eine Möglichkeit, die ta.setCaretPosition (ta.getLineStartOffset (ta.getLineCount() - 1)); nur einmal statt es jedes Mal zu aktualisieren, damit es für die gesamte Anwendung gültig bleibt? –
Darüber hinaus verwenden Sie DefaultCaret caret = (DefaultCaret) ta.getCaret(); caret.setUpdatePolicy (DefaultCaret.ALWAYS_UPDATE); Ihr Code würde auch ohne diese Anweisungen funktionieren? Was ist Ihrer Meinung nach in dieser Hinsicht? –
@JtheRocker nicht, dass ich weiß. Die Caret-Position bewegt sich weiter, während der Text aktualisiert wird. Aus diesem Grund muss der Standort jedes Mal neu berechnet werden. Sie könnten wahrscheinlich JTextArea erweitern und setText überschreiben, indem Sie zuerst super.setText aufrufen und dann das Caret positionieren. Was Ihre zweite Frage betrifft, ist dies eine Frage des gewünschten Verhaltens und der Ergonomie. In Ihrer Frage haben Sie danach gefragt. Wenn Sie jetzt nach der unteren linken Ecke des Bildlauffelds scrollen, suchen Sie nach etwas anderem. Wenn ja, dann erwäge, eine weitere Frage zu SO zu stellen. –