Java Swing 文件和文件夹选择

Java Swing File and Folder Choose

您好,我是 Swing 新手,需要一些帮助。我已经构建了一个文件处理项目,我在其中读取了一个输入文件和项目中的一些其他现有文件,进行了许多检查和解析并生成了一个 csv 和一个 xlsx 文件。直到现在我都使用这些输入

JTextField csvpath = new JTextField();
    JTextField csvfile = new JTextField();
    JTextField xmlpath = new JTextField();
    JTextField xmlfile = new JTextField();
    JTextField excpath = new JTextField();
    JTextField excfile = new JTextField();
    Object[] message = {
        "Enter the path of the CSV file to be created:", csvpath,
        "Enter the CSV file name:", csvfile,
        "Now enter the XML path to be read:", xmlpath,
        "Also enter the XML file name:", xmlfile,  
        "Please enter the Excel file path to be created:", excpath,
        "Finally enter the Excel file name:", excfile     
    };

    int option = JOptionPane.showConfirmDialog(null, message, "Convert XML File to CSV File", JOptionPane.OK_CANCEL_OPTION);
    if (option == JOptionPane.OK_OPTION) {
        String csvPath = csvpath.getText();
        String csvFileName = csvfile.getText();
        String xmlPath = xmlpath.getText();
        String xmlFileName = xmlfile.getText();
        String excPath = excpath.getText();
        String excFileName = excfile.getText();
        String FullcsvPath = csvPath + "\" + csvFileName + ".csv";
        String FullxmlPath = xmlPath + "\" + xmlFileName + ".xml";
        String excelPath = excPath + "\" + excFileName + ".xlsx";
            .
            .
        parsing/creating starts...

因为将来这个项目会被其他人使用我想创建文件选择器并获取 file/folder 路径作为字符串以便读取输入和创建等... 我已经为路径创建了 class 和 public 字符串,当我调用它时,程序不会像以前那样停止,在框架打开时继续 运行 而没有获得我想要的路径。我的新 class 是:

public static void SelectFiles() throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {

    final JFrame window = new JFrame("Parse for manufacturers - Developed by Aris M");
    JPanel topPanel = new JPanel();
    JPanel midPanel = new JPanel();
    JPanel botPanel = new JPanel();
    final JButton openFolderChooser = new JButton("Select Folder to save csv - xlsx results");
    final JButton openFileChooser = new JButton("Select the File to be parsed");
    final JButton closeButton = new JButton("OK");
    window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    final JFileChooser fc = new JFileChooser();

    openFolderChooser.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            fc.setCurrentDirectory(new java.io.File("user.home"));
            fc.setDialogTitle("This is a JFileChooser");
            fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
            if (fc.showOpenDialog(openFolderChooser) == JFileChooser.APPROVE_OPTION) {
                JOptionPane.showMessageDialog(null, fc.getSelectedFile().getAbsolutePath());
                System.out.println(fc.getSelectedFile().getAbsolutePath());
                csv = fc.getSelectedFile().getAbsolutePath();
                xlsx = csv;
                System.out.println(csv);                    
            }                
        }
    });
    openFileChooser.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            fc.setCurrentDirectory(new java.io.File("user.home"));
            fc.setDialogTitle("This is a JFileChooser");
            fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
            if (fc.showOpenDialog(openFileChooser) == JFileChooser.APPROVE_OPTION) {
                JOptionPane.showMessageDialog(null, fc.getSelectedFile().getAbsolutePath());
                System.out.println(fc.getSelectedFile().getAbsolutePath());
                xml = fc.getSelectedFile().getAbsolutePath();
                System.out.println(xml);  
            }
        }
    });
    closeButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {   
                window.dispose();              
        }
    });
    window.add(BorderLayout.NORTH, topPanel);
    window.add(BorderLayout.CENTER, midPanel);
    window.add(BorderLayout.SOUTH, botPanel);
    topPanel.add(openFolderChooser);
    midPanel.add(openFileChooser);
    botPanel.add(closeButton);
    window.setSize(500, 150);
    window.setVisible(true);
    window.setLocationRelativeTo(null);            
}

Swing 代码在称为事件分派线程的单独线程中运行。只需在框架可见时让您的主线程忙碌即可。将以下代码添加到 SelectFiles() 方法的末尾:

        while (window.isVisible()) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }