web-dev-qa-db-ja.com

Javaのファイルチューザを特定のファイルに制限する方法

_private void openMenuActionPerformed(Java.awt.event.ActionEvent evt) {

    DBmanager db = new DBmanager();
    if (!db.getCurrentUser().equals("Admin")) {
        JOptionPane.showMessageDialog(this, "You are Not Allowed to Run Applications");
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("PDF Documents", "pdf"));
        fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("MS Office Documents", "docx", "xlsx", "pptx"));
        fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("Images", "jpg", "png", "gif", "bmp"));
        fileChooser.setAcceptAllFileFilterUsed(false);
        int returnVal = fileChooser.showOpenDialog(this);

        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File file = fileChooser.getSelectedFile();

            if (Desktop.isDesktopSupported()) {
                try {
                    Desktop.getDesktop().open(file);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    } else if (db.getCurrentUser().equals("Admin")) {
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setAcceptAllFileFilterUsed(true);
        int returnVal = fileChooser.showOpenDialog(this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File file = fileChooser.getSelectedFile();
            if (Desktop.isDesktopSupported()) {
                try {
                    Desktop.getDesktop().open(file);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }// TODO add your handling code here:
}
_

こんにちは.... fileChooser.setAcceptAllFileFilterUsed(false);を設定して、ファイルフィルターでファイルをフィルターしようとしています。 「すべてのファイル」オプションはFileChooserから消えますが、PDFドキュメント、ms Officeまたは画像からオプションを選択しない限り、すべてのファイルは表示されたままです。ファイルチューザを開いたときのカスタムフィルタ。

13
julihx

たとえば、JFileChooserをフィルタリングして、最も一般的に見られる画像ファイルを厳密に表示するには、次のようにします。

FileNameExtensionFilter filter = new FileNameExtensionFilter("Image Files", "jpg", "png", "gif", "jpeg");
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(filter);

最初の引数は説明(下部で選択したときに表示されるもの)であり、2番目の引数は非公式のファイル拡張子です。

15
Josh M

FileNameExtensionFilterを使用して、許可された拡張子をFileChooserダイアログに追加できます。次に例を示します。

JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
    "JPG & GIF Images", "jpg", "gif");
chooser.setFileFilter(filter);

詳細については、Javadocsを参照してください: FileNameExtensionFilter

2
Grodriguez

これはJava8.1で正常に動作します

JFileChooser dbfilechooser = new JFileChooser();
FileNameExtensionFilter filter1 = 
  new FileNameExtensionFilter("xls","xls");
FileNameExtensionFilter filter2 = 
  new FileNameExtensionFilter("xlsx", "xlsx");
FileNameExtensionFilter filter3 = 
  new FileNameExtensionFilter("csv", "csv");

dbfilechooser.addChoosableFileFilter(filter1);
dbfilechooser.addChoosableFileFilter(filter2);
dbfilechooser.addChoosableFileFilter(filter3);
1
Suma

私の場合、私は

setFileFilter(          
    new FileNameExtensionFilter("Default file filter", ...)
);

メソッドへの他のすべての呼び出しの後

addChoosableFileFilter(...);

setAcceptAllFileFilterUsed(false)を機能させるため。

0