(JavaFX)如何使DirectoryChooser打开一次而不是两次,并将数据实际显示在文本文件中?

时间:2017-12-07 14:39:46

标签: java arraylist javafx

我使用WindowEvent打开目录,以便选择要保存的文件的文件夹。当我关闭窗口,因此执行WindowEvent时,目录打开,我选择了一个文件夹。然而,目录第二次打开,我发现很难理解为什么。此外,我认为我已经正确编写了代码来填充创建的文本文件,但是当我在执行后查看文件夹中的文本文件Titles.txt时它是空的。

@Override
    public void start(Stage primaryStage) throws Exception {
        LibraryGUI gui = new LibraryGUI();
        primaryStage.setTitle("Personal Lending Library");
        items.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
        Scene scene = new Scene(gui.layout(), 325, 340);
        primaryStage.setScene(scene);
        primaryStage.show();

        primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
            @Override
            public void handle(WindowEvent event) {
                try {

                    DirectoryChooser chooser = new DirectoryChooser();
                    chooser.setTitle("Select Folder");
                    File dir = chooser.showDialog(null);
                    if (dir.exists()) {
                        File file1 = new File(dir.getAbsolutePath() + "\\Titles.txt");
                        FileWriter fw1 = new FileWriter(file1);
                        BufferedWriter buffW1 = new BufferedWriter(fw1);
                        for (int i = 0; i < titles.size(); i++) {
                            buffW1.write(titles.get(i));
                            buffW1.newLine();
                        }
                        fw1.close();
                        buffW1.close();
                    } else {

                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

    }

我期望发生的是目录窗口打开一次,然后可以选择一个文件夹,然后由ArrayList填充创建的文件并保存到所选文件夹。任何帮助/提示都会有很长的路要走。感谢。

1 个答案:

答案 0 :(得分:0)

我通过使用 Parent Stage 而不是使用解决了这个问题 此方法中的 showDialog(stage) 为 null,这样可以防止 DirectoryChooser 重复打开。

Flask login