Java 按下JFileChooser OK后如何不退出?

Java 按下JFileChooser OK后如何不退出?,java,swing,jfilechooser,Java,Swing,Jfilechooser,场景是,当选择一个单选按钮时,我打开一个JFileChooser来选择一个目录,其中应该有一些文件。 我试图显示一条错误消息,我想再次显示目录选择器。 这是代码(当radiobutton更改时我调用的函数): 非常感谢! F.在创建JFileChooser时,重写其approveSelection方法() 这样,文件选择器不会关闭并重新打开,而是保持打开状态,直到满足所需条件(或执行“取消”) 另外,您应该为JOptionPane提供一个parentComponent,而不是给它null使用do

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

非常感谢!
F.

在创建
JFileChooser
时,重写其
approveSelection
方法()

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


另外,您应该为
JOptionPane
提供一个
parentComponent
,而不是给它
null

使用
do{},同时在JFileChooser&JOptionPane周围循环,并显示一条类似“未找到必需的文件。是否要选择其他目录”的消息,而不是错误消息,使用
JOptionPane.YES\u NO\u选项
并在他们说不时退出

尝试下一步:

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);
} 

谢谢,但递归调用该函数还不远。我想我可能会遇到堆栈错误问题…谢谢你,但是递归调用函数已经不远了。我想我可能会有堆栈错误问题…调用堆栈不会有问题。
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);                
    }
}
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);
}