目的:浏览并选择一个文件夹。并在列中添加其属性。
例如,文件夹的名称在名称列中,位置在位置中,依此类推。
由于某种原因,我无法将所选文件夹的属性添加到名为folderTable的表中。该程序似乎知道在添加文件夹后第一行中有内容,但它不显示文件夹本身。
我正在学习,因此能获得任何帮助。
attack type
答案 0 :(得分:0)
TableView
使用Properties and Bindings在每一列中显示数据。您在列上安装了CellValueFactory
,但是正在使用PropertyValueFactory
填充它。
这是正确的方法,但是syncedFolders
类存在问题。 PropertyValueFactory
调查您的syncedFolders
类,并尝试查找具有您指定名称的Property
。问题是您没有定义任何属性:
private String name, location, dateModified;
private double size;
这些是字段,而不是属性。
您将需要重写syncedFolders
类,使其具有可观察的属性,如下所示:
private SimpleStringProperty name = new SimpleStringProperty();
针对每个字段执行此操作,更新构造函数和设置器/获取器,然后重试!
public class syncedFolders {
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty location = new SimpleStringProperty();
private SimpleStringProperty dateModified = new SimpleStringProperty();
private SimpleDoubleProperty size = new SimpleDoubleProperty();
public syncedFolders(
String name,
String location,
String dateModified,
double size) {
this.name.set(name);
this.location.set(location);
this.dateModified.set(dateModified);
this.size.setValue(size);
}
public String getName() {
return name.get();
}
public SimpleStringProperty nameProperty() {
return name;
}
public void setName(String name) {
this.name.set(name);
}
public String getLocation() {
return location.get();
}
public SimpleStringProperty locationProperty() {
return location;
}
public void setLocation(String location) {
this.location.set(location);
}
public String getDateModified() {
return dateModified.get();
}
public SimpleStringProperty dateModifiedProperty() {
return dateModified;
}
public void setDateModified(String dateModified) {
this.dateModified.set(dateModified);
}
public double getSize() {
return size.get();
}
public SimpleDoubleProperty sizeProperty() {
return size;
}
public void setSize(double size) {
this.size.set(size);
}
}
编辑:
我还建议更改表格的填充方式。您当前的addFolder()
方法是将该项直接添加到表的items
属性中,但实际上您应该将它们添加到设置为表项的基础ObservableList
上:
public void addFolder() {
round(printSize, 1);
folderTable.setItems(getSyncedFolders());
folderTable.getItems().add(new syncedFolders(name, location, dateModified, tempSize));
}
folderTable.setItems()
的工作方式是将列表绑定到TableView
。但是,我的意思是对列表所做的任何更改都会自动反映在TableView
中;您完全不需要使用folderTable.getItems().add()
。