我有一个TableView,可以显示任何下载的进度,速度等。现在我想在Label中显示整体下载速度,但我目前不知道如何解决这个问题。每次下载都是独立的。
对于表,使用setCellValueFactory
@FXML
private TableView<Download> downloadTable;
@FXML
private TableColumn<Download, String> filenameColumn;
@FXML
private TableColumn<Download, Double> progressColumn;
@FXML
private TableColumn<Download, String> downloadSpeedColumn;
@FXML
private void initialize(){
filenameColumn.setCellValueFactory(cellData -> cellData.getValue().filenameProperty());
progressColumn.setCellValueFactory(cellData -> cellData.getValue().progressProperty().asObject());
progressColumn.setCellFactory(ProgressBarTableCell.<DownloadContainer>forTableColumn());
downloadSpeedColumn.setCellValueFactory(cellData -> cellData.getValue().transferSpeedProperty());
}
public void setMain(Main main){
downloadTable.setItems(main.getDownloads());
}
对于启动Downloadthreads,我使用带有fixedThreadPool的Executorservice。
我想迭代下载列表并添加每个速度,但我不知道触发更新的人是谁?!
我愿意接受任何建议!
答案 0 :(得分:0)
如果使用https://nxsheet.com/sheets/56db6ae444a4018c075e5672创建可观察的下载列表,该列表返回包含transferSpeedProperty
的数组,则只要任何元素的任何传输速度属性发生更改,它就会触发更新通知。
所以使用
之类的东西创建你的列表ObservableList<Download> downloads
= FXCollections.observableArrayList(download -> new Observable[] {download.transferSpeedProperty()});
然后你可以做
DoubleBinding overallProgress = Bindings.createDoubleBinding(() ->
downloads.stream().collect(Collectors.summingDouble(Download::getTransferSpeed)),
downloads);
和
Label overallTransferSpeedLabel = new Label();
overallTransferSpeedLabel.textProperty().bind(overallProgress.asString());