2011-08-26 38 views
17

Tôi đã tạo giao diện và tôi muốn thêm chức năng cho phép người dùng mở tệp. Tôi đang sử dụng AWT. Tôi không hiểu cách sử dụng FileDialog. Bạn có thể xin vui lòng cho tôi một ví dụ hoặc một liên kết tốt để giải thích điều này?Làm thế nào để sử dụng FileDialog?

+1

Xem thêm [ 'FileDialogTest'] (http://stackoverflow.com/questions/2914627/file-explorer-using-java-how-to-go-about-it/2914733#2914733). – trashgod

Trả lời

3

Có một vài mẫu mã here minh họa cách sử dụng nó cho các tác vụ khác nhau.

Điều đó nói rằng, bạn có thể muốn lùi lại một bước và kiểm tra xem awt có phải là nhiệm vụ tốt nhất cho công việc ở đây hay không. Có những lý do hợp lệ để sử dụng nó trên một cái gì đó như swing/swt tất nhiên, nhưng nếu bạn chỉ mới bắt đầu sau đó Swing, IMO sẽ là một lựa chọn tốt hơn (có nhiều thành phần hơn, nhiều hướng dẫn hơn và nó là một thư viện yêu cầu rộng rãi hơn để làm việc với . những ngày này)

+1

Tất cả ba mẫu mã mà liên kết dẫn đến đều giống hệt nhau ... (chỉ cần nói, nếu chúng trông giống nhau, bạn không điên ...) – ArtOfWarfare

26

Một hoàn chỉnh mã ví dụ, với bộ lọc file:

FileDialog fd = new FileDialog(yourJFrame, "Choose a file", FileDialog.LOAD); 
fd.setDirectory("C:\\"); 
fd.setFile("*.xml"); 
fd.setVisible(true); 
String filename = fd.getFile(); 
if (filename == null) 
    System.out.println("You cancelled the choice"); 
else 
    System.out.println("You chose " + filename); 
+1

điều này đã giúp rất nhiều, nhanh hơn nhiều so với 'JFileChooser' , xấu hổ nó không xử lý tốt ngoại lệ, mà bit 'null' đã vấp ngã tôi. – iKlsR

7

để thêm vào các câu trả lời bằng @TheBronx - đối với tôi, fd.setFile("*.txt"); không đang làm việc trên OS X. Đây hoạt động:

fd.setFilenameFilter(new FilenameFilter() { 
    @Override 
    public boolean accept(File dir, String name) { 
     return name.endsWith(".txt"); 
    } 
}); 

Hoặc như một Java 8 lambda ưa thích:

fd.setFilenameFilter((dir, name) -> name.endsWith(".txt")); 
+1

Không hoạt động trên Ubuntu. Điều này sửa chữa nó. –

+1

Giải pháp tuyệt vời nhưng giải pháp này sẽ không hoạt động trên Windows. https://docs.oracle.com/javase/7/docs/api/java/awt/FileDialog.html#setFilenameFilter%28java.io.FilenameFilter%29 –

+1

@KenoClayton True. Tôi nghĩ rằng giải pháp đa nền tảng là sử dụng cả hai 'setFile' và' setFilenameFilter'. –

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