JavaFX:swing jfilechooser

时间:2018-05-21 12:06:51

标签: java swing javafx jfilechooser filechooser

首先,我知道我的问题可能会有一些缺陷,因为JavaFX有自己的FileChooser(在很大程度上优于Swing的JFileChooser),并且应该劝阻混合FX和Swing。但是 - 我将解释我正在尝试构建的功能,并且我非常愿意接受关于如何到达那里的建议 - 如果我确实走错了方向。

首先 - 主要应用程序是用JavaFX构建的,旨在计算和存档生物样本的参数。主要可观察量是tabPane,其中为每个新样本生成选项卡的新实例。除了计算和归档每个样本的参数外,用户还能够存储与项目中每个样本相关的任何类型的数据文件。这仅用于存档 - 我不打算与这些文件进行深入交互。现在,我来自UNIX背景,并且非常喜欢我的“项目文件夹”的合理数据结构,它可以是可共享的,外部可编辑的和人类可读的。在这方面,我的总体想法是将我保存的输出如下:

  • 根文件夹(即不是定制的文件格式 - 只是一个经典文件夹)
  • 在根文件夹中:

    1 即可。一个主要的XML文件,详细说明了项目的细节

    2 即可。第二层文件夹 - 项目的每个选项卡一个

  • 在特定于示例的文件夹中:

    1 即可。一个XML文件,详细说明了样本的细节

    2 即可。与此示例相关的所有导入文件/数据

现在 - 所有人都说,我有打开/保存功能,我的目标是使用Swing的JFileChooser。使用支持JFileChooser的自定义FileView类,我可以将特定类型的文件夹(与伪扩展及其内部文件及其内容相关)定义为不可传递的,给它一个特定的图标,然后使用filechooser打开它,实际上,好像它是一个真实的文件。

然而,使用JavaFX选择器,这变得复杂。因为DirectoryChooser不存在ShowSaveDialog方法,因此必须使用FileChooser.ShowSaveDialog(),您可以轻松地在现有项目中错误地保存文件夹(而不是重写它) - 因为,至少在OSX中,这很难突出显示在系统文件资源管理器中。另一个痛苦是,在选择文件夹时 - 它没有填充savename输入框,浏览器只是下降到该目录。

同样 - 在打开文件夹时,FileChooser.ShowOpenDialog()显然不合适。在这里使用DirectoryChooser.ShowDialog()更加可口,但普通文件夹和项目相关文件夹之间的区别(即设置它们不可移动并定义图标)在Swing的JFileChooser中仍然可以更好地处理。

因此,是否有人能够推荐我如何在我的FX应用程序中打开JFileChooser?我试过从SwingNode运行JFileChooser,但我认为我没有正确实现它。

    Dialog SaveDialog = new Dialog();
    SaveDialog.setTitle("Save Project");
    SaveDialog.setResizable(true);

    SwingNode swingnode = new SwingNode();

    JFileChooser SaveChooser = new JFileChooser();
    SaveChooser.setAcceptAllFileFilterUsed(false);
    FileNameExtensionFilter filter = new FileNameExtensionFilter(".prot projects", "*.prot");
    SaveChooser.setFileFilter(filter);
    SaveChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
    FileView view = new main.COBFileView();
    SaveChooser.setFileView(view);

    swingnode.setContent(SaveChooser);

    SaveDialog.getDialogPane().setContent(swingnode);
    Window window = SaveDialog.getDialogPane().getScene().getWindow();
    window.setOnCloseRequest(event -> window.hide());
    SaveDialog.showAndWait();    

或者,另一方面,我如何使用FX复制此功能?

非常感谢任何帮助!

0 个答案:

没有答案