首页 > 解决方案 > 如何限制 JFileChooser 只允许选择特定数量的文件?

问题描述

我正在为我的面向对象的大学课程创建一个 Guess Who 游戏作为独立的最终项目,但遇到了一个问题。我希望我的程序能够做的一件事是让用户从计算机上传他/她自己的文件以用于猜猜谁的游戏。基本上,用户单击 JRadioButton,然后 FileChooser 框将打开,因此他/她可以导航到包含文件的文件夹。我意识到您可以使用 setMultiSelectionEnabled(true) 命令来选择多个文件,但是有没有办法可以将选择限制为仅 25 个图像(我的游戏板的大小)?有没有更简单的方法来做到这一点?我应该让用户只能选择充满图像的文件夹吗?

我想要特定文件的原因是因为我想将图像加载到 ImageIcon 数组中,并将文件的名称(在扩展名之前)也加载到数组中。

这是我到目前为止的代码:

private class fileSelector implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            JFileChooser files = new JFileChooser(); //creates a new filechooser
            files.setCurrentDirectory(new File(System.getProperty("user.home"))); //starts the filechooser at the home directory
            FileNameExtensionFilter filter = new FileNameExtensionFilter("*.Images", "jpg", "png", "gif"); //only allows files with these extensions to be used
            files.addChoosableFileFilter(filter); //adds the filter


            files.setMultiSelectionEnabled(true); //makes it so you can select multiple files!
            files.showOpenDialog(null);
       }

    }


任何帮助都会很棒!谢谢!

标签: javaswinguser-interfacejfilechooser

解决方案


可悲的是,他们无法做到这一点,因为这是ComponentUI相关的!

@trashgod 在 这里做了很好的例子

你也可以FileFilter像这样

public class ImagesFilter extends FileFilter {

        @Override
        public boolean accept(File f) {
            if (f.isDirectory()) {
                File[] list = f.listFiles();
                if (list.length == 25) {
                    boolean ret = true;
                    for (File file : list) {
                        ret = ret && isMyImageType(file);
                    }
                    return ret;
                }
            }
            return false;
        }

        @Override
        public String getDescription() {
            //descripe it .
            return "";
        }

    }

然后稍后在JFileChooser.getIcon(File f)覆盖它以获得一个适合您的项目的特殊图标,具有相同的类,例如:-

private final ImagesFilter filter = new ImagesFilter();
            @Override
            public Icon getIcon(File f) {
                if (filter.accept(f))
                {
                    //return your icon
                }
                return super.getIcon(f); //To change body of generated methods, choose 
            }

推荐阅读