【问题标题】:Is there any file navigation in Gluon JavaFX?Gluon JavaFX 中是否有任何文件导航?
【发布时间】:2019-08-12 17:14:21
【问题描述】:

假设您要使用使用 Gluon JavaFX 创建的应用程序打开图片或文件。是否有任何文件导航窗口可用于选择该文件或图片?

假设我们知道我们的localRoot = /root

File localRoot = Services.get(StorageService.class)
            .flatMap(s -> s.getPublicStorage(""))
            .orElseThrow(() -> new RuntimeException("Error retrieving private storage"));

还是我需要手动将文件放入文件夹中,然后使用表格视图扫描所有文件并将它们放入表格视图中以便我可以选择它们?

【问题讨论】:

    标签: java javafx gluon-mobile javafxports


    【解决方案1】:

    您使用的公共存储 API 有误,您需要提供一个有效的名称,例如 DocumentsPictures。这些是您文件系统中的有效公用文件夹。

    例如,您可以获取该文件夹中的文件列表:

    File picRoot = Services.get(StorageService.class)
                .flatMap(s -> s.getPublicStorage("Pictures"))
                .orElseThrow(() -> new RuntimeException("Folder notavailable")); 
    
    File[] files = picRoot.listFiles();    
    if (files != null) {
        for (File file : files) {
            System.out.println("File: " + file);
        }
    }
    

    您如何处理这些文件,或者如何将其呈现给用户,取决于您。

    但是,如果您想浏览图片库,并将这些图片展示给用户,以便他/她选择一张,您应该使用PicturesService::loadImageFromGallery

    从设备的图片库中检索图片

    这将使用本机浏览器应用程序,您可以搜索所有带有图片的常用文件夹。

    它将返回一个Optional<Image>(如果用户取消,则为空),您也可以使用getImageFile() 返回Optional<File> 以及与原始图像关联的文件。

    来自 JavaDoc:

    ImageView imageView = new ImageView();
    Services.get(PicturesService.class).ifPresent(service -> {
        // once selected, the image is visualized
        service.loadFromGallery().ifPresent(image -> imageView.setImage(image));
        // and the file can be shared
        service.getImageFile().ifPresent(file -> 
          Services.get(ShareService.class).ifPresent(share -> 
              share.share("image/jpeg", file)));
     });
    

    【讨论】:

    • 我会尝试使用特定的文件夹。再一次感谢你。此代码是否也适用于 Windows?
    • Windows 和桌面一样? StorageService 适用于桌面和移动设备,但 PicturesService 仅适用于移动设备。
    • 不需要检查picRoot是否为空; Optional.orElseThrow 不能根据定义返回 null。此外,两次调用listFiles() 会不必要地消耗性能。只调用一次,检查结果是否为空。
    • 你说得对,@VGR,我已经解决了。无论如何,这只是一个带有演示目的的简短 sn-p。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多