2016-08-17 104 views
0

我有一個程序可以將大量文本打印到文本區域,我在該應用程序中用作控制檯。如何禁用javaFx中的textArea自動滾動java8

它輸出生活建築信息。

默認情況下,它向下滾動到底部,這很好,但我希望能夠抓住滾動條並在文本區域中查看正在發生的事情,同時文本仍附加到文本區域。

我的問題是我如何禁用自動滾動當我抓住滾動條?

理想的情況是: 自動滾動,如果滾動條的方式傳回最終 禁用自動滾動,當我把滾動條了其很難讀什麼,而文本跳回終點每時每刻。

這是附加器

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

回答

1

我有同樣的問題,這是解決我的文字區域。基本上採取滾動位置前/文本更新後,並確保它是相同的:

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

注:這是.setText()進行測試,但不與AppendText通過()

編輯:添加選擇代碼 - 沒有它,它會有未定義的行爲

+0

謝謝你的回答,我做了類似的事情,但是覺得做錯了,我在控制檯中發生了很多事情,然後這個解決方案損害了性能。我以爲我可以禁用自動滾動,當點擊錨點後啓用它,但似乎很難找到/做到這一點 – LazerBanana