簡體   English   中英

如何限制JFileChooser只允許選擇特定數量的文件?

[英]How to restrict JFileChooser to only allow a specific number of files to be selected?

我正在為我的面向對象的大學課創建一個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 
            }

如果要在組件更改(發生事件)時執行某些操作,請使用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);

Rembember雖然這是文件計數限制而不是文件夾計數限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM