繁体   English   中英

如何将“新文件夹”按钮添加到JFileChooser

[英]How to add a “New folder” button to a JFileChooser

我正在尝试制作一个JFileChooser来选择一个文件夹。 在这个FileChooser中,我希望用户可以选择创建一个新文件夹,然后选择它。 我注意到JFileChooser“保存”对话框默认有一个“新文件夹”按钮,但“打开”对话框中没有类似的按钮。 有谁知道如何在“打开”对话框中添加“新文件夹”按钮?

具体来说,我想将按钮添加到使用此代码创建的对话框中:

            JFrame frame = new JFrame();

            JFileChooser fc = new JFileChooser();

            fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            fc.setFileFilter( new FileFilter(){
                @Override
                public boolean accept(File f) {
                    return f.isDirectory();
                }
                @Override
                public String getDescription() {
                    return "Any folder";
                }
            });

            fc.setDialogType(JFileChooser.OPEN_DIALOG);
            frame.getContentPane().add(fc);

            frame.pack();
            frame.setVisible(true);

好。 最后,我通过使用“保存”对话框而不是“打开”对话框解决了这个问题。 标准保存对话框已经有一个“新文件夹”按钮,但它顶部还有一个“另存为:”面板,我不想要。 我的解决方案是使用标准保存对话框,但隐藏“另存为”面板。

这是保存对话框的代码:

            JFrame frame = new JFrame();

            JFileChooser fc = new JFileChooser();

            fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            fc.setFileFilter( new FileFilter(){

                @Override
                public boolean accept(File f) {
                    return f.isDirectory();
                }

                @Override
                public String getDescription() {
                    return "Any folder";
                }

            });

            fc.setDialogType(JFileChooser.SAVE_DIALOG);
            fc.setApproveButtonText("Select");

            frame.getContentPane().add(fc);


            frame.setVisible(true);

此部件找到并隐藏“另存为:”面板:

            ArrayList<JPanel> jpanels = new ArrayList<JPanel>();

            for(Component c : fc.getComponents()){
                if( c instanceof JPanel ){
                    jpanels.add((JPanel)c);
                }
            }

            jpanels.get(0).getComponent(0).setVisible(false);

            frame.pack();

最终结果:

在此输入图像描述

编辑

这个解决方案有一个怪癖,如果用户在当前没有选择目录的情况下按下批准按钮,则会出现这个问题。 在这种情况下,选择器返回的目录将对应于用户正在查看的任何目录,并与(隐藏)“另存为:”面板中的文本连接。 生成的目录可能是不存在的目录。 我用下面的代码处理了这个问题。

                    File dir = fc.getSelectedFile();
                    if(!dir.exists()){
                        dir = dir.getParentFile();
                    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM