2015-04-27 18 views
6

Stworzyłem jedną aplikację JavaFX, w której aktualizuję log z jednym procesem w tle. Dlatego ustawiam tekst logu w aplikacji TextArea i ustawiając przewijanie do dołu za pomocą logs.setScrollTop(Double.MAX_VALUE). ale pasek przewijania jest ustawiony nieco od dołu. Próbowałem również TextFlow wewnątrz ScrollPan i ustawienie przewijania do dołu przy użyciu logDisplay.setVvalue(1.0). Daje również ten sam rezultat.JavaFX: Po ustawieniu tekstu w textArea ustawienie przewijania do dołu w osobnym wątku nie działa

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); 
}); 

Próbowałem też uruchomić kod w oddzielnym wątku jak

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

Ale nic nie działa :(
Pomożesz mi co jest złego w tym
Dzięki

? - Edycja -
Wygląda na to, że problem jest związany z problemem wątku. Wartość paska przewijania jest aktualizowana do poprzedniej wartości tekstowej. g wartość przewijania to nie jest pobieranie ostatniej wartości, ale ma ona coraz starszą wartość, więc pasek przewijania ustawiony jest na koniec poprzedniej wiadomości, a nie na ostatnią linię.

+1

Napisałem naprawdę proste rozwiązanie [w tym pytaniu] (http://stackoverflow.com/questions/43886613/javafx-textarea-cursor-moves-back-to-the-first-line-on-new -text/43886919 # 43886919), który używa 'appendText' zamiast' setText' i eliminuje potrzebę ręcznego ustawiania kija. – DVarga

Odpowiedz

5

Nie znam faktycznego problemu z tym problemem, ale znalazłem alternatywne rozwiązanie.

Ustawiam pozycję karetki na końcu tekstu przy użyciu długości tekstu.

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

To działa dla mnie. :)

Powiązane problemy