我有一些TableView有两列 - 名称和大小; 此表适用于File对象;
列的PropertyValueFactory可以获取对象的属性,尝试搜索somenameProrperty,getSomename,isSomename; 我需要从File。
获取length()方法columnName.setCellValueFactory(new PropertyValueFactory<>("name"));
columnSize.setCellValueFactory(new PropertyValueFactory<>("length"));
此代码视图文件名(getName()方法),但长度为colums为空。 知道我可以用工厂做什么来获取文件中的长度()?
答案 0 :(得分:0)
找到解决方案
columnSize.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<File, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(TableColumn.CellDataFeatures<File, String> param) {
long size = param.getValue().length();
size = size/1024;
return new ReadOnlyObjectWrapper(String.valueOf(size));
}
});
答案 1 :(得分:0)
您应该直接实现单元格值工厂,而不是使用方便(有些遗留)类PropertyValueFactory
。
假设您的columnSize
是TableColumn<File, Number>
,您可以
columnSize.setCellValueFactory(cellData ->
new SimpleLongProperty(cellData.getValue().length()));
如果要更优雅地格式化列中的数据,可以另外设置单元格工厂:
columnSize.setCellFactory(col -> new TableCell<File, Number>() {
@Override
protected void updateItem(Number length, boolean empty) {
super.updateItem(length, empty);
if (empty) {
setText(null);
} else {
setText(formatFileLength(length.longValue()));
}
}
});
// ...
private String formatFileLength(long length) {
final String[] unitNames = {"bytes", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"};
int i ;
for (i = 0 ; length > 1024 && i < unitNames.length - 1 ; i++) {
length = length / 1024 ;
}
return String.format("%,d %s", length, unitNames[i]);
}