gpt4 book ai didi

java - javafx TableCell 类中的 updateItem() 方法

转载 作者:行者123 更新时间:2023-12-01 08:48:44 45 4
gpt4 key购买 nike

TableCell 中的 updateItem() 方法何时被调用?是在与该单元格关联的属性发生更改时吗?

在我的应用程序中,我有一个线程,根据提供的超链接下载内容。我有一个 TableView,在两个不同的列中显示下载的名称和进度。在进度列中,我希望在中心有一个进度条和一个标签显示下载百分比的进度条。为此我从 Progressbar and label in tablecell 获得了帮助但似乎 updateItem() 方法没有读取“进度”变量,并且每次都会读取 -1 。

Progress.setCellValueFactory(new PropertyValueFactory<Download, Double>("progress"));
Progress.setCellFactory(new Callback<TableColumn<Download, Double>, TableCell<Download, Double>>() {
@Override
public TableCell<Download, Double> call(TableColumn<Download, Double> param) {
return new TableCell<Download, Double>(){
ProgressBar bar=new ProgressBar();
public void updateItem(Double progress,boolean empty){
if(empty){
System.out.println("Empty");
setText(null);
setGraphic(null);
}
else{
System.out.println(progress);
bar.setProgress(progress);
setText(progress.toString());
setGraphic(bar);
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
}
}
};
}
});

我的下载类的ADT

public class Download extends Task<Void>{
private String url;
public Double progress;
private int filesize;
private STATE state;
private Observer observer;
public Object monitor;
private String ThreadName;
private int id;

public static enum STATE{
DOWNLOADING,PAUSE,STOP;
}
public Download(String url,Observer observer,Object monitor){
this.url=url;
this.observer=observer;
this.monitor=monitor;
progress=new Double(0.0d);
}

在 Download 类的 run 方法中,我通过添加下载的字节数来不断更新“进度”变量。

最佳答案

Task 中有一个 progress 属性,但如果您写入添加的进度字段,该属性不会被修改。 (PropertyValueFactory 使用方法来检索结果,而不是字段,并且 Double 字段无论如何都无法提供观察结果的方法。)

updateProgress 应用于更新此属性,以确保该属性与应用程序线程正确同步。

例如

public class Download extends Task<Void>{

protected Void call() {

while (!(isCancelled() || downloadComplete())) {

...

// update the progress
updateProgress(currentWorkDone / totalWork);
}

return null;
}

}

关于java - javafx TableCell 类中的 updateItem() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42524286/

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