[java - swing] Automatisches Scrollen

Hi,
habe ein JTextArea in einer JScrollPane. Die JTextArea wird als Logausgabe benutzt, so dass dort eine Menge Einträge hinzugefügt werden.
Nun wäre es schön, wenn es möglich wäre, dass man immer den aktuellsten Eintrag sehen würde. D.h. die JTextArea bzw. JScrollPane müsste automatisch mit scrollen.

Weiss jemand wie man das aktivieren kann oder ob es überhaupt möglich ist?

Gruß,
Scope5

Hallo Scope5

Also möglich ist erstmal alles *G*
Eingefallen ist mir da folgende Lösung:

Nach dem Hinzufügen des neuen Textes sollte folgender Code das gewünschte Verhalten herbeiführen


deinJTextField.setCaretPosition(deinJTextField.getText().length());

Weiß jetzt nicht, ob das besonders elegant ist, sollte aber erstmal funktionieren.

Gruss, Chris

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,
habe deinen Vorschlag ausprobiert. Allerdings funktioniert es nicht. Die JTextArea scrollt nicht automatisch mit. Vielleicht weil du von einem JTextField ausgegangen bist.

Kennt sonst jemand eine andere Lösung?

Gruß,
Scope5

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Eine Idee: (hab ich schon mal irgendwann gemacht, genauer Code grad nicht greifbar)

Hol dir von der ScrollPane die vertikale Scollbar get…()
und rufe darauf setValue() oder so mit einem großen Wert (oder elegant mit setValue(getMaximum())

Wie gesagt, methodennamen nur Dummy aber der Ansatz sollte so gehen. Falls du Probleme mit neuzechnen hast einfach in einen extra Thread auslagern:

new Thread("Scrollthread"){
 public void run(){
 scroller.getScrollBar().setVal.....
 }
}.start();

Hi,
bekomme immer eine ClassCastException!

public void log(String str){
jTextArea1.append(str);
javax.swing.JScrollPane scrollpane=
(javax.swing.JScrollPane)jTextArea1.getParent();
javax.swing.JScrollBar scrollbar=scrollpane.getVerticalScrollBar();
scrollbar.setValue(scrollbar.getMaximum());
}

Gruß,
Scope5

Hi,
bekomme immer eine ClassCastException!

public void log(String str){
jTextArea1.append(str);
javax.swing.JScrollPane scrollpane=

(javax.swing.JScrollPane)jTextArea1.getParent();
javax.swing.JScrollBar

Parent von jTextArea1 ist nämlich der Viewport. Merk dir doch die Instanz der ScrollPane, ist einfacher als mit getParent() zu suchen. Wenn du auf sowas stößt, sollte er dir eigentlich sagen was er hat. Ansonsten die einfachste Form des Debugging nutzen - System.out:

System.out.println("Name1:"+jTextArea1.getParent().getClass().getName());
System.out.println("Name1:"+jTextArea1.getParent().getParent().getClass().getName());

So kann man’s machen um rauszukriegen was los ist. Aber wie gesagt, merk dir einfach die Instanz der Scrollbar. Die hast du eh noch (sieht mir wie JBuilder-generierte Namen aus, der legt alle Oberflächenelemente an)

Michael