2012-04-07 19 views
7

(Cảm ơn trước! Xin vui lòng cho tôi biết nếu bạn cần thêm Mẫu mã thông tin. Ở phía dưới.)Java JFileChooser với Filter để được cho là hiển thị danh bạ CHỈ thất bại trong việc hiển thị chỉ thư mục

Vấn đề tôi đang cố gắng để giải quyết:

Tôi đang cố gắng để có được đối tượng JFileChooser này để chỉ hiển thị các thư mục (và không phải tệp), thông qua việc sử dụng đối tượng javax.swing.filechooser.FileFilter có tệp này trong tệp chấp nhận (Tệp) bị ghi đè phương pháp: return file.isDirectory();. Tuy nhiên, ít nhất là trên mac của tôi, nó không có vẻ để ngăn chặn các tập tin được hiển thị cùng với các thư mục (nó ngăn chặn các tập tin được chọn mà không sử dụng phương thức setFileSelectionMode()).

Câu hỏi

Am tôi thiếu cái gì? Nếu không, có ai từng gặp điều này trước đây không?

hiểu biết của tôi/giả định:

  1. Sự kỳ diệu sẽ xảy ra khi bạn vượt qua trong một đối tượng javax.swing.filechooser.FileFilter vào phương pháp setFileFilter() của JFileChooser.
  2. Có vẻ như JFileChooser tôi với setFileFilter() là hành xử như sử dụng của setSelectionMode(JFileChooser.DIRECTORIES_ONLY);

import java.io.File; 
import javax.swing.filechooser.FileFilter; 

// inside a method that's adding this to a JPanel 

_fileChooser = new JFileChooser("."); 
_fileChooser.setControlButtonsAreShown(false); 
_fileChooser.setFileFilter(new FolderFilter()); 
// _fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
_panelMidLeft.add(_fileChooser); 

// an inner class, defined somewhere else in the class 

private class FolderFilter extends javax.swing.filechooser.FileFilter { 
    @Override 
    public boolean accept(File file) { 
    return file.isDirectory(); 
    } 

    @Override 
    public String getDescription() { 
    return "We only take directories"; 
    } 
} 

Cảm ơn!

Alex

+0

Hãy học chung [ước Java đặt tên] (http://java.sun.com/ docs/books/jls/second_edition/html/names.doc.html # 73307) (cụ thể là trường hợp được sử dụng cho tên) cho tên lớp, phương pháp & thuộc tính & sử dụng nó một cách nhất quán. –

+0

Cảm ơn bạn đã đề xuất. Khác với việc sử dụng '_' (trong trường hợp của tôi là để thực sự chỉ ra các biến mẫu), bạn có phiền khi chỉ ra một vài điều, trong khi tôi đang xem các tài liệu trên web ngay bây giờ về các quy ước? –

Trả lời

15

Mã của bạn hoạt động cho tôi. My SSCCE:

import java.io.File; 
import javax.swing.JFileChooser; 

public class ShowDirectoriesOnly { 
    public static void main(String[] args) { 
     JFileChooser fileChooser = new JFileChooser("."); 
     fileChooser.setControlButtonsAreShown(false); 
     fileChooser.setFileFilter(new FolderFilter()); 
     fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
     fileChooser.showOpenDialog(null); 
    } 

    private static class FolderFilter extends javax.swing.filechooser.FileFilter { 
     @Override 
     public boolean accept(File file) { 
     return file.isDirectory(); 
     } 

     @Override 
     public String getDescription() { 
     return "We only take directories"; 
     } 
    } 
} 

Nếu bạn vẫn gặp vấn đề, tốt nhất là tạo ra của riêng bạn SSCCE đó chứng tỏ vấn đề của bạn.

Sửa

Ảnh chụp màn hình về cách nó trông theo OS X với JDK1.7

OS X screenshot

+2

Mã này hiển thị cho tôi một JFileChooser nơi tất cả các tệp có màu xám và không thể chọn, nhưng vẫn hiển thị (OS X, JDK 1.7) +1 cho SSCCE, làm cho nó rất đơn giản để kiểm tra – Robin

+0

@Robin: cảm ơn người đứng đầu. Trên Windows 7, tôi không thấy các tệp nào cả, chỉ là các thư mục. Tôi tự hỏi liệu điều này có thể phụ thuộc vào L & F hay không. –

+0

Cảm ơn Hovercraft Đầy đủ của Lươn và Robin. Có, tôi vẫn có thể xem các tệp trên mac của tôi, sử dụng ví dụ của bạn.1 trên ví dụ về SSCCE và tôi chắc chắn sẽ làm điều đó trong các câu hỏi SO tương lai của tôi. (Tôi đã hy vọng tôi có thể đăng hình ảnh ở đây nhưng hóa ra tôi cần 10 điểm danh tiếng trở lên trước khi tôi có thể làm điều đó trên SO. Rất tiếc.) –

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