我正在为我的面向对象的大学课创建一个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做了great examples here
你也可以像这样做一个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
}
如果您想在组件发生变化时发生某事(发生事件),请使用PropertyListener。每当用户改变他的选择时,就会发生一个事件。您可以向文件选择器添加属性侦听器,并检查他是否选择了多于您想要的文件。
看看这个例子(最大文件2):
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
// be used
files.addChoosableFileFilter(filter); // adds the filter
files.setMultiSelectionEnabled(true); // makes it so you can select multiple files!
files.addPropertyChangeListener(e -> {
File[] selectedFiles = files.getSelectedFiles();
if (selectedFiles.length > 2) {
File[] selectedFilesNew = new File[2];
// Select the first 2
for (int i = 0; i < selectedFilesNew.length; i++) {
selectedFilesNew[i] = selectedFiles[i];
}
files.setSelectedFiles(selectedFilesNew);
JOptionPane.showMessageDialog(files, "Only 2 selected files allowed.", "File chooser",
JOptionPane.ERROR_MESSAGE);
}
});
files.showOpenDialog(null);
请记住,这是文件计数限制而不是文件夹计数限制。