2012-02-20 40 views
7

Xin chào tất cả,Làm thế nào để chọn FileFilter mặc định khi tạo một hộp thoại JFileChooser?

Tôi có một thể hiện của một javax.swing.JFileChooser và tôi bổ sung thêm một vài choosable javax.swing.FileFilter s sử dụng addChoosableFileFilter.

Tuy nhiên khi tôi hiển thị hộp thoại (qua số showSaveDialog), FileFilter tùy chỉnh của tôi không được chọn theo mặc định.

tôi muốn chọn lọc "Hình ảnh Files" theo mặc định ..

Làm thế nào để chúng ta chọn một bộ lọc mặc định cho hộp thoại javax.swing.JFileChooser?

SSCCEd:

public static void main(String args[]) { 
    java.awt.EventQueue.invokeLater(new java.lang.Runnable() { 
     @Override 
     public void run() { 
      new javax.swing.JFrame() { 
       { 
        final javax.swing.JButton button = new javax.swing.JButton("Save"); 
        button.addMouseListener(new java.awt.event.MouseAdapter() { 
         @Override 
         public void mousePressed(java.awt.event.MouseEvent e) { 
          new javax.swing.JFileChooser() { 
           { 
            addChoosableFileFilter(NewFileFilter("Text Files", new String[] { "txt" })); 
            addChoosableFileFilter(NewFileFilter("Image Files", new String[] { "gif", "png", "jpg" })); 
            addChoosableFileFilter(NewFileFilter("Audio Files", new String[] { "mp3" })); 
            addChoosableFileFilter(NewFileFilter("Video Files", new String[] { "mp4", "avi" })); 
            showSaveDialog(button); 
           } 

           private javax.swing.filechooser.FileFilter NewFileFilter(final String desc, final String[] allowed_extensions) { 
            return new javax.swing.filechooser.FileFilter() { 
             @Override 
             public boolean accept(java.io.File f) { 
              if (f.isDirectory()) { 
               return true; 
              } 
              int pos = f.getName().lastIndexOf('.'); 
              if (pos == -1) { 
               return false; 
              } else { 
               String extension = f.getName().substring(pos + 1); 
               for (String allowed_extension : allowed_extensions) { 
                if (extension.equalsIgnoreCase(allowed_extension)) { 
                 return true; 
                } 
               } 
               return false; 
              } 
             } 

             @Override 
             public String getDescription() { 
              return desc; 
             } 
            }; 
           } 
          }; 
         } 
        }); 
        add(button); 
        setSize(100, 100); 
        setVisible(true); 
       } 
      }; 
     } 
    }); 
} 

Trả lời

13

Sử dụng setFileFilter():

FileFilter ff = NewFileFilter("Image Files", new String[] { "gif", "png", "jpg" }); 
addChoosableFileFilter(ff); 
setFileFilter(ff); 

Tại sao các bạn subclassing chọn tập tin, thay vì chỉ sử dụng nó? Và tại sao bạn không tôn trọng các quy ước đặt tên của Java (các phương thức bắt đầu bằng một chữ thường)? Và tại sao bạn không tôn trọng chính sách luồng của Swing, mà nói rằng các thành phần Swing chỉ được sử dụng trong EDT.

+0

Đã thêm javax.swing.SwingUtilities.invokeLater trong ví dụ. Tại sao phương thức nên là camelCased chứ không phải PascalCased? – Pacerier

+0

[Quy ước mã cho Java] (http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html) – mKorbel

+0

Bởi vì đó là quy ước chuẩn trong Java. –

0
FileFilter filter = new FileNameExtensionFilter("Data Files", "*.dat"); 
JFileChooser fc = new JFileChooser(); 
fc.addChoosableFileFilter(filter); 
fc.setMultiSelectionEnabled(false); 
+1

[Vui lòng định dạng mã của bạn đúng cách] (https://stackoverflow.com/editing-help), thêm một số chi tiết vào câu trả lời của bạn. – Dwhitz

Các vấn đề liên quan