2009-08-03 19 views
9

Tôi đang cố gắng chuyển từ sử dụng JFileChooser sang FileDialog khi ứng dụng của tôi đang chạy trên máy mac để nó sẽ sử dụng trình chọn tệp OS X. Cho đến nay tôi có đoạn mã sau:Làm thế nào tôi có thể làm cho một java FileDialog chấp nhận các thư mục như FileType của nó trong OS X?

FileDialog fd = new FileDialog(this); 
    fd.setDirectory(_projectsBaseDir.getPath()); 
    fd.setLocation(50,50); 
    fd.setFile(?); 
    fd.setVisible(true); 
    File selectedFile = new File(fd.getFile()); 

Tôi sẽ đặt câu hỏi gì? để trình chọn tệp của tôi cho phép bất kỳ thư mục nào là đầu vào cho trình chọn tệp (phương pháp sau đã kiểm tra để đảm bảo thư mục là đúng loại thư mục tôi chỉ muốn FileDialog chấp nhận bất kỳ thư mục nào).

Trả lời

10

Giả sử bạn đã quyết định sử dụng FileDialog thay vì JFileChooser di động, bạn cần đặt thuộc tính hệ thống để FileDialogs tạo cho thư mục.

Tài sản được đề cập là apple.awt.fileDialogForDirectories.

Vì vậy, chỉ đơn giản là làm như sau:

System.setProperty("apple.awt.fileDialogForDirectories", "true"); 
FileDialog fd = new FileDialog(this); 
fd.setDirectory(_projectsBaseDir.getPath()); 
fd.setLocation(50,50); 
fd.setVisible(true); 
File selectedFile = new File(fd.getFile()); 
System.setProperty("apple.awt.fileDialogForDirectories", "false"); 

Cần lưu ý rằng đây không phải là di động, tuy nhiên, kể từ khi bạn đang tìm kiếm để thay thế JFileDialog di động, tôi cho rằng không phải là một vấn đề.

+0

Đó là lời cảm ơn hoàn hảo! – Mike2012

+3

Có tương đương với Windows không? – ThePrince

1

Tôi cố gắng để chuyển đổi từ việc sử dụng một JFileChooser đến một FileDialog khi ứng dụng của tôi đang được chạy trên một mac do đó nó sẽ sử dụng các tập tin OSX chooser

tôi sẽ đề nghị bạn nên cố gắng để ở trong thế giới Swing và né tránh thế giới nặng cân của AWT. Có nhiều cách để giải quyết các vấn đề với Swing L & F trên Mac, nếu đó là vấn đề của bạn. Hãy xem this post to an earlier question, liên kết đến trang web hiển thị cách nhận biểu tượng Mac chính xác trong trình chọn tệp.

Xin lỗi vì đã không trả lời chính xác câu hỏi của bạn. Nếu có các lý do khác khiến bạn muốn ở lại với FileDialog, tôi sẽ sẵn sàng xóa bài đăng này.

+0

Tôi đồng ý - JFiloeChooser là một lựa chọn tốt hơn nhiều, và câu hỏi của ông có vẻ giống như một vấn đề L & F hơn bất cứ điều gì khác. – aperkins

0

Sau khi sử dụng giải pháp phổ biến nhất đối với thời gian:

System.setProperty("apple.awt.fileDialogForDirectories", "true"); 

Tôi không thể giải quyết bản dịch của Buttons (chỉ bằng tiếng Anh) thực hiện FileDialog bản địa.

Vì vậy, tôi nhận được một workaround rằng hoạt động hoàn hảo trên hệ điều hành MacOS:

try { 
    Process process = Runtime.getRuntime().exec(new String[]{// 
     "/usr/bin/osascript", // 
     "-e", // 
     "set selectedFolder to choose folder\n"// 
     + "return POSIX path of selectedFolder" 
    }); 
    int result = process.waitFor(); 
    if (result == 0) { 
     String selectedFolder = new BufferedReader(new InputStreamReader(process.getInputStream())).readLine(); 
     return new File(selectedFolder); 
    } 
} catch (Exception ex) { 
} 

return null; 

Thưởng thức!