2011-11-26 34 views
15

Khi sử dụng các ứng dụng java, mỗi lần tôi mở một hộp thoại, thư mục bắt đầu luôn là thư mục chính của tôi. Có cách nào để làm cho nó nhớ thư mục được sử dụng cuối cùng? Cách khác, có hộp thoại chọn tệp java 'cải tiến' cho phép nhập tìm kiếm hay bất kỳ tính năng nào tiêu chuẩn trong hầu hết các hộp thoại chọn tệp ứng dụng khác không?Có cách nào để tạo hộp thoại chọn tệp java nhớ thư mục cuối cùng không?

EDIT: Tôi nghĩ rằng câu trả lời được đăng địa chỉ câu hỏi cho viết ứng dụng java, nhưng không cho người dùng. Có lẽ người dùng không thể thay đổi giao diện trình duyệt tệp, nhưng tôi muốn biết điều đó. Trong trường hợp nó quan trọng, tôi có một vài ví dụ cụ thể trong tâm trí (Amazon AWS uploader) nhưng tôi đã quan sát thấy hành vi đó trong hầu hết các ứng dụng java sử dụng một trình duyệt tập tin.

Trả lời

12

Lưu trữ trình chọn tệp làm thuộc tính lớp. Khi nó được mở lại, sau đây sẽ được bảo tồn.

  1. Thư mục.
  2. Địa điểm trong thư mục đến nơi người dùng đã cuộn.
  3. Bộ lọc tệp đã chọn.
  4. Kích thước.
  5. Vị trí trên màn hình.
  6. PLAF.
  7. ..

Có cách nào để làm cho nó nhớ thư mục được sử dụng cuối cùng?

Tất nhiên, nếu bạn có ý nghĩa tồn tại tình trạng giữa chạy, có một số hình thức khác để lưu trữ các thông tin chi tiết, và những nơi/cách để lưu trữ chúng. Xem this answer để biết ví dụ về việc lưu trữ các giới hạn của JFrame bằng cách sử dụng tệp Properties.


Có lẽ nó không thể cho người dùng thay đổi giao diện trình duyệt tập tin, ..

gì người dùng? Bạn có nghĩa là các nhà phát triển sử dụng một trong một ứng dụng.?

Có thể những gì bạn cần là triển khai trình chọn tệp của riêng bạn. Nếu đúng như vậy, bạn có thể bắt đầu bằng mã số FileBro.

+0

+1 rất đơn giản. Nói cách khác, chỉ tạo một và chỉ sử dụng lại nó để giữ trạng thái của nó (chọn, vị trí, v.v.) –

+0

đây là dự án tuyệt vời +1 – mKorbel

+0

Bởi 'người dùng', ý tôi là người dùng cuối, chứ không phải nhà phát triển. Tôi thường xuyên buộc phải sử dụng các ứng dụng java được viết bởi những người khác có giao diện trình duyệt tệp mà tôi không thích. Tôi cho rằng nếu tôi có thể truy cập nguồn, tôi có thể thay đổi trình duyệt tệp và đóng gói lại mã, do đó, để kết thúc câu trả lời của bạn khá hữu ích. – keflavich

2

Bạn có thể cache vị trí dir cuối cùng trong ứng dụng và trong khi mở các file chooser xác định vị trí mặc định bằng cách setCurrentDirectory

+0

Tôi giả sử bạn đang nói về Swing. –

+1

Đây không phải là giải pháp tốt như giữ lại tham chiếu đến trình chọn. Xem câu trả lời của tôi. –

+2

@Andrew của nó không phải về giữ lại trường hợp của filechooser của nó về chỉ giữ lại một vị trí –

8

Swing JFileChooser có một phương pháp để thiết lập thư mục ban đầu. setCurrentDirectory(File dir) Sau khi tệp đã được chọn, bạn có thể lấy thư mục đã chọn bằng cách gọi getCurrentDirectory và lưu trữ nó trong một số tệp cấu hình của ứng dụng của bạn.

+0

Đó là chức năng cấp thấp, phải không? Có cách nào để truy cập và sửa đổi các biến đó với tư cách người dùng không? – keflavich

+1

Đây không phải là giải pháp tốt khi giữ lại tham chiếu đến trình chọn. Xem câu trả lời của tôi. –

28

JFileChooser không nhớ.Tuy nhiên, Java cung cấp một API Preferences

Preferences prefs = Preferences.userRoot().node(getClass().getName()); 
JFileChooser chooser = new JFileChooser(prefs.get(LAST_USED_FOLDER, 
    new File(".").getAbsolutePath())); 
int returnVal = chooser.showOpenDialog(null); 
if (returnVal == JFileChooser.APPROVE_OPTION) { 
    // do something 
    prefs.put(LAST_USED_FOLDER, chooser.getSelectedFile().getParent()); 
} 
+1

nơi được xác định LAST_USED_FOLDER? – Wronski

+2

đó là một hằng số. Chỉ cần xác định một. –

0

Ở đây tôi đã sử dụng mã đơn giản với hộp thoại thư mục để mở thư mục với sử dụng cuối cùng

IDialogSettings dialogSettings = Activator.getDefault().getDialogSettings(); 
    String lastUsedPath = dialogSettings.get(IAntUIConstants.DIALOGSTORE_LASTANTHOME); 
    if (lastUsedPath == null) { 
     lastUsedPath = "c:\\"; 
    } 
    DirectoryDialog dialog = new DirectoryDialog(Display.getDefault().getActiveShell()); 
    dialog.setFilterPath(lastUsedPath); 
    String location = dialog.open(); 
    if (location == null) { 
     return; 
    } 
    dialogSettings.put(IAntUIConstants.DIALOGSTORE_LASTANTHOME, location); 
     AntCorePreferences preferences = AntCorePlugin.getPlugin().getPreferences(); 
     String defaultHome = preferences.getAntHome(); 
     if (location.equalsIgnoreCase(defaultHome)) { 
      location = null; 
     } 
Các vấn đề liên quan