gpt4 book ai didi

java - 在 TableView JavaFx 中动态添加新元素

转载 作者:行者123 更新时间:2023-11-30 03:41:15 24 4
gpt4 key购买 nike

伙计们,这是我在按下按钮 theButton 时用来在 TableView 中添加元素的代码。

表格 View 中充满了从网络上获取的元素,因此填充整个表格 View 大约需要 30 秒...

我想动态添加所有数据,不希望放入表中的所有数据都已准备好。所以现在就出现了按下按钮后需要30秒左右才能显示结果的情况。这是我的代码,有什么问题吗?谢谢。

theButton.setOnAction(new EventHandler() 
{
@Override
public void handle(Event event)
{

try
{
ObservableList<Elements> toShow = FXCollections.observableArrayList();

ArrayList<String> strings = takeSomeStrings();

for (int i = 0; i < strings.size(); i++)
{
toShow.add(new Elements(takeInfoFromTheWeb(strings.get(i))));

myTableView.setItems(toShow);
}

} catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
}
}

最佳答案

使用在后台从 Web 获取数据的执行器。获取后,使用 Platform.runLater() 修改 JavaFX 应用程序线程上的 TableView。

import java.util.concurrent.Executors;

private final Executor executor = Executors.newSingleThreadExecutor();

theButton.setOnAction(event ->
{
try
{
ObservableList<Elements> toShow = FXCollections.observableArrayList();
myTableView.setItems(toShow);

ArrayList<String> strings = takeSomeStrings();

for (String s: strings)
{
executor.execute(() -> {
Elements el = new Elements(takeInfoFromTheWeb(s));
Platform.runLater(() -> toShow.add(el));
});
}

} catch (FileNotFoundException e)
{
e.printStackTrace();
}
});

如果想并行取数据,只需更换执行器即可,例如

private final Executor executor = Executors.newFixedThreadPool(4);

您将并行下载最多 4 个项目。

关于java - 在 TableView JavaFx 中动态添加新元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26787911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com