当前位置: 首页 > 知识库问答 >
问题:

JavaFX TableView如何将文件大小设置为PropertyValueFactory?

常自怡
2023-03-14

我有一些具有两列的TableView-名称和大小;此表适用于File对象

PropertyValueFactory可以为列获取对象的属性,尝试搜索somenameProrperty、getSomename、isSomename;我需要从文件中获取length()方法。

columnName.setCellValueFactory(new PropertyValueFactory<>("name"));
columnSize.setCellValueFactory(new PropertyValueFactory<>("length"));

此代码查看文件名(getName()方法),但长度列为空。知道我可以用factory从文件中获取length()吗?

共有2个答案

夏朝
2023-03-14

找到解决方案了

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));
    }
});
庄经国
2023-03-14

您应该直接实现单元值工厂,而不是使用方便的(有些遗留的)类PropertyValueFactory。

假设您的列大小是一个表列

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]);
}
 类似资料:
  • 我正在使用JHipster开发基于Spring Boot和AngularJS的应用程序。我的问题是如何设置上传文件的最大大小? 如果我试图上传到大文件,我会在控制台中获得以下信息: 和状态为500的服务器响应。 怎么设置?

  • 在此输入图像说明 虽然大小设置为与父级匹配,但仍未设置为极端全屏???

  • 问题内容: 我想将配置文件名称设置为整个程序包,但我不知道如何。如果在哪里不是简单的方法,那么我必须用注释标记包和子包中的每个类。 标签不支持这样的属性,所以我不知道。 问题答案: 您可以将个人资料设置为: 文件-用于xml配置 Java配置类 在它们的每一个中,您都可以对特定的软件包使用组件扫描。

  • 我是javafx和fxml的新手,我无法在边框窗格中居中我的项目。 我的fxml如下: 问题似乎是vbox有整个屏幕,里面的项目在top_left。我知道我需要将vbox的宽度设置为最小值,而不是让它在边框中扩展,但是怎么做?? 非常感谢。

  • 我没有任何方法在接口中获取文件大小。那么,有什么方法可以限制webflux中上传文件的最大大小,而不是复制它呢?我知道有像这样的标题,但是看起来并不安全。

  • 这里已经回答了如何设置选项卡大小。 但是如何对不同的文件类型进行不同的设置呢?例如,我希望HTMLs的标签大小为2,但其他文件的标签大小为4。