【问题标题】:Text Area addtext from ArrayList Without the Comma (,) in JavaFXTextarea 从 ArrayList 中添加文本,JavaFX 中没有逗号 (,)
【发布时间】:2016-01-25 03:29:52
【问题描述】:

我有一个 Arraylist AList 有超过 100000 个项目。我需要在 UI 中显示每个数据项。但是TeaxtArea.addtext(AList);以这种方式显示数据

[A,B,C,D.......]

同样如此。我需要做的是将它打印在一个页面中。所以我必须将节点传递给PrinterJob

无论如何我可以删除逗号并立即用换行符替换它。我不能使用appendText,因此附加 100000 个项目会使 UI 无响应。

PS:我已经从一个线程中收集了数据并将它放在一个 ArrayList 上。我在 ListView 上更新它没有问题,但是在 TextArea 上更新它时有问题。我不会在不使用 Append 的情况下更改打印格式

【问题讨论】:

标签: listview arraylist printing javafx textarea


【解决方案1】:

您可以像这样使用StringBuilder 预处理列表并创建一个新字符串:

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

【讨论】:

  • 是的,这种方法很有效,但是由于数据集很大,它使我的 UI 无响应。 ListView 不会发生这种情况
  • TextArea 与 ListView 不同。 ListView 已针对仅呈现您看到的部分进行了优化,而 TextArea 一次呈现全部。
  • 对我有什么改进的建议吗?一次渲染时,我的 UI 卡住了。我之前尝试过节流,但需要大量时间。
  • 如果字符串已经在列表中,使用list.stream().collect(Collectors.joining("\n")) 比使用StringJoiner 更简单。
【解决方案2】:

让我们将aList视为String的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);

试试这个...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多