java - 如何限制 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);
}
}
任何帮助都会很棒!谢谢!
解决方案
可悲的是,他们无法做到这一点,因为这是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
}
推荐阅读
- excel - 查找字符串,更改所有 Excel 工作表的颜色
- r - 正确使用 drake::expose_imports() - 在哪里拨打电话 - 它是递归的吗?
- elasticsearch - Elasticsearch,根据兄弟嵌套字段的术语 aggs
- reactjs - react-bootstrap-sweetalert 第一次点击后如何禁用提交按钮?
- c++ - 如何在同一行内打印和返回?
- python - 捕获正则表达式组,对其进行编辑并在 Python 3 中重新插入
- laravel-6 - 如何在使用 VerifiesEmail 功能实现的 laravel 6 API 中验证后使电子邮件验证链接过期?
- visual-studio - 我正在看关于统一的教程。弹出错误 CS1002 和错误 CS1519。有谁知道如何修复错误?
- php - 使用 php 在我的数据库中插入记录
- javascript - 如何在 PhoneGap Javascript iOs 移动应用程序中显示警报消息?