JFileChooser OK按下后如何退出?

时间:2014-11-06 17:25:46

标签: java swing jfilechooser

场景是,当选择了radiobutton时,我打开一个JFileChooser来选择一个DEDECTORY,其中应该是一些文件。 我试图显示错误消息,我想再次显示目录选择器。 这是代码(我在radiobutton更改时调用的函数):

private void JFileChooserOpen(java.awt.event.ActionEvent evt) {
    fileChooser.setCurrentDirectory(new java.io.File("."));
    fileChooser = new JFileChooser(); 
    fileChooser.setDialogTitle("Select a directory");
    fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

    fileChooser.setAcceptAllFileFilterUsed(false);

    int result = fileChooser.showOpenDialog(fileChooser);
    if (result == JFileChooser.APPROVE_OPTION) {
// here I'm calling a function that searches for specific files. 
// true these files are found, false, they are not.
        if (checkTheDir(fileChooser.getSelectedFile()))
        {
// assigning the path to a label
                thePath.setText(fileChooser.getSelectedFile().toString());
        }
        else
        {
// file not found
            JOptionPane.showMessageDialog(null, "File GuiRap not found!", 
                    "Controlla meglio", JOptionPane.WARNING_MESSAGE);
// what should I do, here, to open again the file dialog window?
// here I'm calling again this function, but surely is not a good practice!
            JFileChooserOpen(evt);
        }
// cancel button changes a radiobutton
    } else if (result == JFileChooser.CANCEL_OPTION) {
        rbnParams.setSelected(true);
    }
} 

非常感谢! F。

3 个答案:

答案 0 :(得分:5)

创建JFileChooser时,覆盖其approveSelection方法(documentation)。

JFileChooser fileChooser = new JFileChooser() {
    @Override
    public void approveSelection() {
        // test your condition here
        if (checkTheDir(getSelectedFile())
            super.approveSelection();
        else
            JOptionPane.showMessageDialog(null, "File GuiRap not found!", 
                "Controlla meglio", JOptionPane.WARNING_MESSAGE);                
    }
}

这样,文件选择器不会关闭并重新打开,但会保持打开状态直到满足所需条件(或取消执行)。

此外,您应为parentComponent提供JOptionPane,而不是null

答案 1 :(得分:0)

在JFileChooser&周围使用do { } while循环JOptionPane,而不是错误消息,显示消息,如"找不到必要的文件。你想选择一个不同的目录吗?",使用JOptionPane.YES_NO_OPTION并在他们拒绝时退出

答案 2 :(得分:0)

尝试下一个:

private void JFileChooserOpen(java.awt.event.ActionEvent evt) {
    fileChooser = new JFileChooser(); 
    fileChooser.setDialogTitle("Select a directory");
    fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    fileChooser.setAcceptAllFileFilterUsed(false);
    boolean valid = false;
    do {
        fileChooser.setCurrentDirectory(new java.io.File("."));
        if (fileChooser.showOpenDialog(fileChooser) == JFileChooser.APPROVE_OPTION) {
            valid = checkTheDir(fileChooser.getSelectedFile());
            if (valid) {
                thePath.setText(fileChooser.getSelectedFile().toString());
            } else {
                JOptionPane.showMessageDialog(null, "File GuiRap not found!", 
                    "Controlla meglio", JOptionPane.WARNING_MESSAGE);
            }
        } else {
            rbnParams.setSelected(true);
            valid = true;
        }
    } while(!valid);
}