JFileChooser在showDialog框中使文件名不可用

时间:2015-10-11 22:09:32

标签: java swing jfilechooser showdialog

我正在开发一个使用JFileChooser来允许用户选择文件的作业,它会将该文件复制到用户选择的任何文件夹中。我能够让编程自动复制用户选择的文件,该文件具有相同的名称和.bak扩展名。

我想要做的是允许用户选择要复制到的文件的目标文件夹,而不是使用showSaveDialog,我发现我可以使用showDialog并将所有内容设置为目录。 但是,我想知道是否有办法摆脱允许用户创建文件名的区域?或者将其设置为不可编辑?我将其更改为showOpenDialog,但这会让用户选择一个文件而我无法找到仅制作该目录的方法

感谢您的帮助!我将发布我的所有代码,因为它是一个小程序,以防你想要查看其他部分,我会将代码置于***之间。

public class CopyFile extends JFrame{

private JFileChooser fc;
private JButton copyButton;
private JButton chooseFileButton;
private JButton destinationButton;
private File workingDirectory;
private JLabel sourceLabel;
private JTextArea displayCopyText;
private JLabel destinationLabel;
private JTextField sourceText;
private JLabel copyText;
private JTextField destinationText;

public static void main(String [] args) {
    CopyFile go = new CopyFile();
    go.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    go.setResizable(false);
    go.setSize(500, 150);
    go.setVisible(true);
}

public CopyFile() {
    super("Copy a text file");
    setLayout(new FlowLayout());
    fc = new JFileChooser();

    //Open dialog box inside project folder to make easier to find files
    workingDirectory = new File(System.getProperty("user.dir"));
    fc.setCurrentDirectory(workingDirectory);
    //create labels and buttons for window
    chooseFileButton = new JButton("CHOOSE SOURCE FILE");
    destinationButton = new JButton("DESTINATION FOLDER");
    copyButton = new JButton("COPY FILE");      
    sourceLabel = new JLabel("SOURCE FILE: ", JLabel.CENTER);
    sourceText = new JTextField(15);
    sourceText.setEditable(false);
    destinationText = new JTextField(15);
    destinationText.setEditable(false); 
    destinationLabel = new JLabel("DESTINATION:", JLabel.CENTER);
    //JScrollPane SP = new JScrollPane();       
    displayCopyText = new JTextArea();
    displayCopyText.setPreferredSize(new Dimension(300, 50));
    displayCopyText.setRows(2);
    displayCopyText.setLineWrap(true);
    displayCopyText.setWrapStyleWord(true);
    displayCopyText.setEditable(false);     

    //add everything to JFrame  
    add(sourceLabel);
    add(sourceText);
    add(chooseFileButton);  
    add(destinationLabel);
    add(destinationText);
    add(destinationButton);
    //add(copyText);
    add(displayCopyText);
    add(copyButton);

    //Create TheHandler object to add action listeners for the buttons.
    TheHandler handler = new TheHandler();
    chooseFileButton.addActionListener(handler);
    destinationButton.addActionListener(handler);
    copyButton.addActionListener(handler);
}

//Inner class to create action listeners    
private class TheHandler implements ActionListener {
    private File selectedDestinationFile;
    private File selectedSourceFile;
    private int returnVal;

    public void actionPerformed(ActionEvent event) {

    //Selecting a source file and displaying what the user is doing.
        if(event.getSource() == chooseFileButton) {     
            returnVal = fc.showOpenDialog(null);
            //Set the path for the source file. 
            if(returnVal == JFileChooser.APPROVE_OPTION) {  
                selectedSourceFile = fc.getSelectedFile();
                sourceText.setText(selectedSourceFile.getName());   
            }       
        }//end if
    **********************************************************************************              
        //Handle destination button.
        if(event.getSource() == destinationButton) {
            fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            fc.setDialogTitle("CHOOSE A FOLDER ONLY, NO NEED TO NAME THE FILE TO BE COPIED.");

            //I changed below from a showSaveDialog and played around with it with no luck.
            returnVal = fc.showDialog(null, "Choose Destination");
            if(returnVal == JFileChooser.APPROVE_OPTION) {
                selectedDestinationFile = fc.getSelectedFile();
                destinationText.setText(fc.getSelectedFile().getAbsolutePath());
            }               
        }//end if
    **********************************************************************************

        //Handle copy button
        if(event.getSource() == copyButton) {
            /*
            Path sourcePath = selectedSourceFile.toPath();
            Path destinationPath = selectedDestinationFile.toPath();        
            try {
                Files.copy(sourcePath,  destinationPath);
            } catch (IOException e) {
                e.printStackTrace();
            }   */

            String name = selectedSourceFile.getName();
            name = selectedSourceFile.getName().substring(0,  name.lastIndexOf(".")) + ".bak";
            File destinationFile = new File(selectedDestinationFile.getParentFile(), name);
            destinationText.setText(name);  
            try {
                Files.copy(selectedSourceFile.toPath(), destinationFile.toPath());
            } catch (IOException e) {
                e.printStackTrace();
            }

            if(returnVal == JFileChooser.APPROVE_OPTION) {      
                displayCopyText.append("SUCCESSFULLY COPIED:\n" 
                                + selectedSourceFile.getName() + " ===>> " + name); 
            }
            else {
                displayCopyText.append("COPY WAS CANCELED BY USER.\n");
            }   
        }//end if

    }//end actionPerformed      
}//end TheHandler class
}//end class

0 个答案:

没有答案