如何从单独的类中存储和检索JFileChooser中的用户选择?

时间:2014-07-29 01:55:05

标签: java jfilechooser

我正在编写一些代码,以便选择我将从那里开始使用的多个文件目录中的任何一个。我想从一个单独的类调用一个函数来查找用户选择。我有一个全局ArrayList,它是根据是选择一个还是多个目录而添加的。我遇到的问题是,当我尝试调用一个函数来返回该ArrayList时,该代码总是在用户输入完成之前运行,因此它只返回一个空白的ArrayList,因为没有输入任何内容。

这是文件选择器的代码:

package application;

import javax.swing.*;

import java.awt.event.*;
import java.awt.*;
import java.io.File;
import java.util.*;

public class FileExplorer extends JPanel implements ActionListener {

    //Intiate Buttons and File Chooser
    JButton openButton = new JButton("Choose a File Directory...);
    JButton openMultipleButton = new JButton("Choose Multiple File Directories...");

    JFileChooser chooser;
    ArrayList<File> filesChosen = new ArrayList<File>();
    String choosertitle = "Show Picker";

    public FileExplorer() {

        //Add buttons and listeners
        add(openButton);
        openButton.addActionListener(this);

        add (openMultipleButton);
        openMultipleButton.addActionListener(this);

    }

    public void actionPerformed(ActionEvent e) {

        //set chooser parameters
        chooser = new JFileChooser();
        chooser.setDialogTitle(choosertitle);
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

        if (e.getActionCommand().matches("Choose Multiple File Directories...")){

            //Set selection to allow multiple choices
            chooser.setMultiSelectionEnabled(true);

            if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
                File[] numFiles = chooser.getSelectedFiles();
                for (int i = 0; i < numFiles.length; i++) {
                    filesChosen.add(numFiles[i]);
                }
            } else {
                System.out.println("No Selection ");
            }
        } else {

            //Don't allow multiple choices
            chooser.setMultiSelectionEnabled(false);

            //return shows
            if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
                filesChosen.add(chooser.getSelectedFile());
            } else {
                System.out.println("No Selection ");
            }
        }

        //
        //


    }

    public ArrayList<File> getFiles() {
        return filesChosen;
    }

    public Dimension getPreferredSize() {
        return new Dimension(200, 200);
    }

    public void launch() {
        JFrame frame = new JFrame("");
        FileExplorer panel = new FileExplorer();
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        frame.getContentPane().add(panel, "Center");
        frame.setSize(panel.getPreferredSize());
        frame.setVisible(true);

    }

这是我在其他课程中使用的电话,只是为了测试它是否有效:

FileExplorer fe = new FileExplorer();
fe.launch();
System.out.println(fe.getFiles());

我还试图编辑有问题的函数来重新检查ArrayList,如下所示:

public ArrayList<File> getFiles() {
        if (filesChosen.isEmpty() ==false) {
            return filesChosen;
        } else {
            try {
                Thread.sleep(1000);
                getFiles();
            } catch (InterruptedException ex) {
                Thread.currentThread().interrupt();
            }    
        }
        return null;
    }
}

但变量从未更新过。即使用户输入后。我感到茫然,我对这个问题有任何帮助。

0 个答案:

没有答案