TableCell中的updateItem()方法何时被调用? 与该单元格关联的属性何时更改?
在我的应用程序中,我有一个基于提供的超链接下载内容的线程。我有一个TableView,它在两个不同的列中显示下载的名称和进度。在进度列中,我想在中心有一个进度条和一个标签显示已下载%的进度条。为此,我从Progressbar and label in tablecell获取了帮助。但似乎updateItem()方法没有读取'progress'变量,并且每次都读取-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方法中,我通过向其添加下载字节数来不断更新'progress'变量。
答案 0 :(得分:1)
progress
中有Task
个属性,但如果您写入添加的进度字段,则不会修改该属性。 (PropertyValueFactory
使用方法检索结果,而不是字段,Double
字段无法提供观察结果的方法。)
updateProgress
更新此属性,以确保该属性与应用程序线程正确同步。
e.g。
public class Download extends Task<Void>{
protected Void call() {
while (!(isCancelled() || downloadComplete())) {
...
// update the progress
updateProgress(currentWorkDone / totalWork);
}
return null;
}
}