2016-08-17 1 views
0

Ich habe ein Programm, das viel Text in den Textbereich ausgibt, den ich als Konsole in meiner App verwendet habe.So deaktivieren Sie das automatische Scrollen von textArea in javaFx java8

Es gibt Live-Building-Informationen aus.

Standardmäßig scrollt es nach unten, was nett ist, aber ich würde gerne den Scrollbalken benutzen und im Textbereich nach oben gehen, um zu sehen, was passiert, während der Text noch an den Textbereich angehängt ist .

Meine Frage ist, wie kann ich automatisches Scrollen deaktivieren, wenn ich den Scrollbalken schnappe?

Das ideale Szenario wäre: Auto-Scrollen, wenn die Bildlaufleiste Weg zurück zum Ende ist Deaktivieren Sie die automatischen Scrollen, wenn ich die Scroll-Leiste als schwierig bis nahm alles zu lesen, während der Text bis zum Ende springen zurück die ganze Zeit.

Das ist mein Textbereich appender

private void run(final TextArea console) { 
    try { 
     console.clear(); 
     BufferedReader stdInput; 
     stdInput = new BufferedReader(new InputStreamReader(process.getInputStream())); 

     String line; 
     while ((line = stdInput.readLine()) != null) { 
      String feed = line; 
      Platform.runLater(() -> console.appendText(feed + "\n")); 
     } 
    } catch (Exception e) { 
     console.appendText(e.toString()); 
    } 
} 

Antwort

1

ich hatte das gleiche Problem, und dies löste es. Grundsätzlich nehmen die Scroll-Position vor/nach dem Text aktualisieren und sicherstellen, dass es ist das gleiche:

Platform.runLater(() -> { 
    double pos = console.getScrollTop(); 
    int anchor = console.getAnchor(); 
    int caret = console.getCaretPosition(); 
    console.appendText(feed + '\n'); 
    console.setScrollTop(pos); 
    console.selectRange(anchor, caret); 
}); 

Hinweis: Dies ist mit .setText() getestet, aber nicht mit appendText()

EDIT: Hinzugefügt Auswahl Code - ohne, es wird undefined Verhalten haben

+0

Vielen Dank für Ihre Antwort, ich habe etwas ähnliches getan, aber es fühlte sich falsch, es zu tun, ich habe ziemlich viel passiert in der Konsole dann diese Lösung die Leistung ein wenig schaden. Ich dachte, ich könnte das automatische Scrollen deaktivieren, wenn ich auf den Anker klicke und ihn danach wieder aktiviere, scheint aber schwer zu finden – LazerBanana

Verwandte Themen