有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java取消在JFileChooser中选择文件而不关闭对话框

我正在尝试使用JFileChooser实现“另存为”对话。该对话框应该允许用户键入文件名并单击保存,此时将返回并创建新的File对象

这是可行的,但当我尝试添加另一个对话时,我遇到了一个问题。具体地说,我想创建一个“文件已经存在”对话框,使用JOptionPane来警告用户,如果他们试图创建一个与预先存在的文件同名的文件(这是许多程序中的常见功能)。对话提示"File <filename> already exists. Would you like to replace it?" (Yes/No)。如果用户选择“是”,则文件对象应正常返回。如果用户选择“否”,则JFileChooser应保持打开状态,并等待选择/创建另一个文件

问题是我找不到取消选择的方法(如果用户选择“否”)并保持对话框打开。我有密码:

public void saveAs()
{
    if (editors.getTabCount() == 0)
    {
        return;
    }

    final JFileChooser chooser = new JFileChooser();

    chooser.setMultiSelectionEnabled(false);

    chooser.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent arg0)
        {
            File f =  chooser.getSelectedFile();

            if (f.exists())
            {
                int r = JOptionPane.showConfirmDialog(
                     chooser,
                     "File \"" + f.getName() +
                     "\" already exists.\nWould you like to replace it?",
                     "",
                     JOptionPane.YES_NO_OPTION);    

                //if the user does not want to overwrite
                if (r == JOptionPane.NO_OPTION)
                {
                    //cancel the selection of the current file
                    chooser.setSelectedFile(null);
                }
            }
        }
    });

    chooser.showSaveDialog(this);

    System.out.println(chooser.getSelectedFile());
}

如果用户选择“否”(即对话框关闭时选择的文件为^{),则此操作将成功取消对文件的选择。然而,随后它也立即结束了对话

我希望在发生这种情况时,对话保持开放。有没有办法做到这一点


共 (2) 个答案

  1. # 1 楼答案

    重写approveSelection()方法。比如:

    JFileChooser chooser = new JFileChooser( new File(".") )
    {
        public void approveSelection()
        {
            if (getSelectedFile().exists())
            {
                System.out.println("Do You Want to Overwrite File?");
                // Display JOptionPane here.  
                // if yes, super.approveSelection()
            }
            else
                super.approveSelection();
        }
    };
    
  2. # 2 楼答案

    如果JFileChooser不想覆盖文件,你可以简单地重新打开它

    对话框的目录将与之前相同,因此用户无需再次导航