2015-04-27 5 views
6

Ho creato un'applicazione JavaFX in cui sto aggiornando il registro con un processo in background. Quindi sto impostando il testo del registro in TextArea e impostando lo scorrimento verso il basso usando logs.setScrollTop(Double.MAX_VALUE). ma la barra di scorrimento è impostata su un po 'dal basso. Ho anche provato TextFlow all'interno di ScrollPan e ho impostato lo scorrimento verso il basso usando logDisplay.setVvalue(1.0). Sta anche dando lo stesso risultato.JavaFX: dopo aver impostato il testo in textArea, l'impostazione di scorrimento verso il basso in thread separati non funziona

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

Ho anche cercato di eseguire codice in thread separato come

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

Ma niente sta lavorando :(
Mi potete aiutare cosa c'è di sbagliato in questo
Grazie

? - Modifica--
Sembra che il problema sia dovuto a problemi di threading Il valore della barra di scorrimento si sta aggiornando al valore di testo precedente. g valore di scorrimento non sta recuperando l'ultimo valore ma sta diventando vecchio valore in modo che la barra di scorrimento sia impostata alla fine del messaggio precedente, non nell'ultima riga effettiva.

+1

Ho postato una soluzione molto semplice [in questa domanda] (http://stackoverflow.com/questions/43886613/javafx-textarea-cursor-moves-back-to-the-first-line-on-newew -text/43886919 # 43886919) che usa 'appendText' piuttosto che' setText' ed elimina la necessità di impostare manualmente il cursore. – DVarga

risposta

5

Non conosco il problema reale di questo problema, ma ho trovato una soluzione alternativa.

Sto impostando la posizione del cursore alla fine del testo utilizzando la lunghezza del testo.

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

Funziona per me. :)

Problemi correlati