Tôi cảm thấy có một cách đơn giản để thực hiện việc này nhưng tôi không thể tìm ra. Tôi có một JFileChooser cho phép người dùng chọn thư mục. Tôi muốn hiển thị tất cả các tệp trong các thư mục để cung cấp cho người dùng một số ngữ cảnh, nhưng chỉ các thư mục mới được chấp nhận làm lựa chọn (có thể nút Mở sẽ bị tắt khi tệp được chọn). Có cách nào dễ dàng để làm điều này?JFileChooser chọn thư mục nhưng hiển thị các tệp
Trả lời
Ghi đè phương thức approvedSelection(). Một cái gì đó như:
JFileChooser chooser = new JFileChooser(new File("."))
{
public void approveSelection()
{
if (getSelectedFile().isFile())
{
// beep
return;
}
else
super.approveSelection();
}
};
AFAIK JFileChooser tách lọc tệp (có thể xem, rất cấu hình) từ bộ lọc lựa chọn (những gì có thể được chọn).
Cấu hình lọc lựa chọn nhiều hạn chế hơn, nhưng AFAIK bạn có thể chọn để cho phép chỉ dirs hoặc chỉ file được lựa chọn với setFileSelectionMode()
Tôi nghĩ rằng giải pháp tốt nhất chỉ là để cho phép người dùng lựa chọn hoặc là một tệp hoặc thư mục. Và nếu người dùng chọn tệp chỉ cần sử dụng thư mục chứa tệp đó.
Xem setFileSelectionMode()
trong How to Use File Choosers:
setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY)
Phụ Lục: Hiệu quả có thể được nhìn thấy bằng cách dòng uncommenting 73 của FileChooserDemo
này, nhưng nó dường như là nền tảng phụ thuộc.
Phụ Lục: Nếu sử dụng FILES_AND_DIRECTORIES
, hãy xem xét việc thay đổi văn bản nút cho phù hợp:
chooser.setApproveButtonText("Choose directory");
Như hiệu quả là L & F phụ thuộc, xem xét sử dụng DIRECTORIES_ONLY
trên nền tảng đó đã đáp ứng yêu cầu giao diện người dùng của bạn:
if (System.getProperty("os.name").startsWith("Mac OS X")) {
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
} else {
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
}
Nhưng điều đó sẽ ẩn các tập tin, đó là những gì anh ta không muốn. –
@mmyers: Nó hiển thị các tệp có màu xám trong ví dụ được trích dẫn ở trên. YMMV – trashgod
Từ những gì hướng dẫn nói, có vẻ như nó phụ thuộc vào laf. –
Giải pháp của tôi là sự hợp nhất giữa các câu trả lời của camickr và trashgod:
final JFileChooser chooser = new JFileChooser() {
public void approveSelection() {
if (getSelectedFile().isFile()) {
return;
} else
super.approveSelection();
}
};
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
+1 Có vẻ như tôi đang ở trong công ty tốt! Tôi đã cập nhật câu trả lời của mình để phản ánh cách tiếp cận kết hợp này. – trashgod
Rất tốt! 'JFileChooser.FILES_AND_DIRECTORIES' là ** quan trọng **! Không có nó, (như trong câu trả lời của 'camickr') giải pháp là ** vô dụng **, như tôi đã thử nghiệm. –
Giải pháp ghi đè approveSelection
có thể gây phiền toái cho một số người dùng nhất định.
Đôi khi, người dùng chỉ cần nhấp vào tệp trong thư mục mà không có lý do gì (mặc dù cô ấy muốn chọn thư mục chứ không phải tệp đó). Nếu điều đó xảy ra, người dùng sẽ (loại a) bị kẹt trong JFileChooser
vì approveSelection
sẽ không thành công, ngay cả khi cô ấy bỏ chọn tệp đó. Để tránh phiền toái này, đây là những gì tôi làm:
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(
JFileChooser.FILES_AND_DIRECTORIES);
int option = fileChooser.showDialog(null,
"Select Directory");
if (option == JFileChooser.APPROVE_OPTION) {
File f = fileChooser.getSelectedFile();
// if the user accidently click a file, then select the parent directory.
if (!f.isDirectory()) {
f = f.getParentFile();
}
System.out.println("Selected directory for import " + f);
}
Chọn thư mục, ngay cả khi người dùng đã chọn một tệp có khả năng sử dụng tốt hơn theo ý kiến của tôi.
Giữ fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY)
và sử dụng:
File[] selectedFiles = fileChooser.getSelectedFile().listFiles();
- 1. Nhận tất cả tên tệp trong thư mục bằng JFileChooser?
- 2. Trình chọn tệp JavaFX chọn tệp và/hoặc thư mục?
- 3. Không hiển thị các thư mục trong đầu ra rsync
- 4. đặt JFileChooser để mở thư mục hiện tại
- 5. 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
- 6. làm jfilechooser hiển thị hình thu nhỏ hình ảnh
- 7. WebDAV - Yêu cầu "Hiển thị tệp trong thư mục"?
- 8. Hiển thị các trang trong một thư mục trong Jekyll?
- 9. Mở các tệp bằng JFileChooser
- 10. JFileChooser getCurrentDirectory trả về thư mục hiện tại sai?
- 11. Trình khám phá tệp của studio Android không hiển thị tệp trong thư mục dữ liệu
- 12. Không cho phép các để hiển thị các thư mục trong thư mục ROOT tôi
- 13. Không thể hiển thị các mục có thư viện AppCompat
- 14. JFileChooser chọn tập tin trống
- 15. Bash: scp tất cả các tệp trong một thư mục, nhưng không phải thư mục con
- 16. SVN hiển thị các tệp trong thư mục hoạt động đã lỗi thời
- 17. Làm thế nào để hiển thị các thư mục và thư mục con từ thư mục trong PHP
- 18. JFileChooser thay đổi thư mục mặc định trong Windows
- 19. Kiểm tra xem thư mục không có tệp nào, nhưng thư mục này có thể chứa các thư mục con
- 20. điều chỉnh Tệp đã chọn thành FileFilter trong một JFileChooser
- 21. chọn tệp ngẫu nhiên từ thư mục
- 22. Express, tệp bố cục ngọc bích hiển thị nội dung nhưng không hiển thị đầu
- 23. JFileChooser cho các thư mục trên Mac: làm thế nào để làm cho nó không hút?
- 24. Hiển thị tên thư mục trong Visual Studio tab mở
- 25. Bản địa hóa chuỗi "Tất cả các tệp" của JFileChooser
- 26. Làm một JFileChooser chọn văn bản của tên tập tin nhưng không phải là mở rộng
- 27. Sao chép tệp từ cấu trúc thư mục nhưng loại trừ thư mục có tên
- 28. Bash. Xóa tất cả các tệp và thư mục nhưng một số tệp nhất định
- 29. Thư mục đã tạo không hiển thị trong trình khám phá tệp ..
- 30. Làm thế nào lệnh unix định vị vẫn hiển thị các tệp/thư mục không còn nữa?
Thay nghèo UX. –