2016-01-25 29 views
0

我有一個Arraylist AList它有超過100000個項目。我需要在UI中顯示每個數據項。但TeaxtArea.addtext(AList);示出以這種方式來自ArrayList的文本區addtext沒有逗號(,)在JavaFX

數據[A,B,C,d ..........]

同樣。我需要做的是在一頁上打印這個。所以我必須通過節點PrinterJob

是否有無論如何,我可以一次刪除逗號並用換行符替換它。我不能使用appendText,因此附加100000個項目使UI無響應。

PS:我已經從一個線程收集了數據並將它放在ArrayList上。我在ListView上更新它沒有問題,但在TextArea上做什麼時候會出現問題。我不會改變印刷的格式,而無需使用附加

+0

的可能的複製[JavaFx - 更新GUI](http://stackoverflow.com/questions/26554814/javafx-updating-gui) – fabian

回答

0

你可以預處理列表,並使用StringBuilder這樣一個新的String:

List<String> list = new ArrayList<>(); 

for(int i=0; i < 100000; i++) { 
    list.add("This is line nr " + i); 
} 

StringBuilder sb = new StringBuilder(); 
for(String text: list) { 

    if(sb.length() > 0) { 
     sb.append("\n"); 
    } 

    sb.append(text); 
} 

textArea.appendText(sb.toString()); 

設置初始容量在這樣一個大的情況下,也可能有助於採集。

如果您使用Java 8,您可能還想看看StringJoiner

+0

是的這種方法種類的作品但它使我的用戶界面由於大量的數據無響應。這不會發生在ListView中。 –

+0

TextArea與ListView不同。 ListView優化爲只渲染您看到的部分,而TextArea一次渲染。 – Roland

+0

任何建議對我來說如何改善?一次渲染時,我的UI會卡住。我之前嘗試過節流但是花費了大量的時間。 –

0

讓我們考慮ALIST爲字符串的ArrayList中,

ArrayList<String> aList = new ArrayList<String>(); 
     aList.add("A"); 
     aList.add("B"); 
     aList.add("C"); 

你去的PrinterJob之前然後使用此代碼,

StringBuffer listText = new StringBuffer(); 
for(String s : aList){ 
    listText.append(s+"\n"); 
} 
System.out.println(listText); 

嘗試......