2015-04-27 2 views
6

Ich habe eine JavaFX-Anwendung erstellt, wo ich Protokoll mit einem Hintergrundprozess aktualisieren. Also setze ich Logtext in TextArea und setze Scrolling nach unten mit logs.setScrollTop(Double.MAX_VALUE). aber Scrollbar ist von unten nach oben eingestellt. Ich habe auch versucht TextFlow in ScrollPan und Einstellung nach unten scrollen mit logDisplay.setVvalue(1.0). Es gibt auch das gleiche Ergebnis.JavaFX: Nach dem Einstellen von Text in TextArea funktioniert Einstellung nach unten in separaten Thread nicht funktioniert

Platform.runLater(() -> { 
    logs.setText([setting log text]);//TextArea logs 
    logs.setScrollTop(Double.MAX_VALUE)); 
}); 

//For TextFlow inside ScrollPane 
Platform.runLater(() -> { 
    logs.setText([setting log text]);//Text logs 
    logDisplay.setVvalue(1.0); 
}); 

Ich habe auch versucht, Code in separaten Thread wie

new Thread() { 
    public void run(){ 
     System.out.println("called set test"); 
     logs.setText([setting log text]);//Text logs 
     logDisplay.setVvalue(1.0); 
    } 
}.start(); 

Aber nichts funktioniert :(
Können Sie mir helfen, was falsch ist in diesem laufen
Dank

? - Bearbeiten -
Sieht aus wie das Problem wegen Threading-Problem ist. Scrollbar Wert wird auf den vorherigen Textwert aktualisiert. Eigentlich während Retriev g scroll value Es wird nicht der letzte Wert abgerufen, aber es wird ein älterer Wert, sodass die Bildlaufleiste auf das Ende der vorherigen Nachricht und nicht auf die letzte Zeile gesetzt wird.

+1

Ich habe eine wirklich einfache Lösung [in dieser Frage] (http://stackoverflow.com/questions/43886613/javafx-textarea-cursor-moves-back-to-the-first-line-on-new) gepostet -text/43886919 # 43886919), die 'appendText' anstelle von' setText' verwendet und das manuelle Setzen des Caret überflüssig macht. – DVarga

Antwort

5

Ich kenne das eigentliche Problem dieses Problems nicht, aber ich fand eine alternative Lösung.

Ich setze Caret Position am Ende des Textes mit Länge des Textes.

logs.setText(logText); 
logs.positionCaret(logText.length()); 

Es funktioniert für mich. :)

Verwandte Themen