كيف يمكنني تقييد JFileChooser على الدليل؟
-
09-06-2019 - |
سؤال
أريد قصر المستخدمين على الدليل والأدلة الفرعية الخاصة به ولكن زر "الدليل الأصلي" يسمح لهم بالتصفح إلى دليل عشوائي.
كيف ينبغي لي أن أفعل ذلك؟
المحلول
ربما يمكنك القيام بذلك عن طريق تعيين الخاص بك FileSystemView.
نصائح أخرى
في حال احتاج أي شخص آخر إلى هذا في المستقبل:
class DirectoryRestrictedFileSystemView extends FileSystemView
{
private final File[] rootDirectories;
DirectoryRestrictedFileSystemView(File rootDirectory)
{
this.rootDirectories = new File[] {rootDirectory};
}
DirectoryRestrictedFileSystemView(File[] rootDirectories)
{
this.rootDirectories = rootDirectories;
}
@Override
public File createNewFolder(File containingDir) throws IOException
{
throw new UnsupportedOperationException("Unable to create directory");
}
@Override
public File[] getRoots()
{
return rootDirectories;
}
@Override
public boolean isRoot(File file)
{
for (File root : rootDirectories) {
if (root.equals(file)) {
return true;
}
}
return false;
}
}
من الواضح أنك ستحتاج إلى إنشاء طريقة "createNewFolder" أفضل، ولكن هذا يقيد المستخدم إلى واحد أو أكثر من الأدلة.
واستخدامها مثل هذا:
FileSystemView fsv = new DirectoryRestrictedFileSystemView(new File("X:\\"));
JFileChooser fileChooser = new JFileChooser(fsv);
او مثل هذا:
FileSystemView fsv = new DirectoryRestrictedFileSystemView( new File[] {
new File("X:\\"),
new File("Y:\\")
});
JFileChooser fileChooser = new JFileChooser(fsv);
لقد اكتمل حل ألين تقريبًا.ثلاث مشاكل مفتوحة للحل:
- يؤدي النقر فوق زر "الصفحة الرئيسية" إلى إخراج المستخدم من القيود
- لا يمكن الوصول إلى DirectoryRestrictedFileSystemView خارج الحزمة
- نقطة البداية ليست الجذر
- قم بإلحاق @Override بـ DirectoryRestrictedFileSystemView
public TFile getHomeDirectory()
{
return rootDirectories[0];
}
تعيين الطبقة والمنشئ
public
يتغير
JFileChooser fileChooser = new JFileChooser(fsv);
داخلJFileChooser fileChooser = new JFileChooser(fsv.getHomeDirectory(),fsv);
أستخدمه لتقييد المستخدمين بالبقاء في ملف مضغوط عبر TrueZips TFileChooser ومع تعديلات طفيفة على الكود أعلاه، يعمل هذا بشكل مثالي.شكرًا جزيلاً.
لا داعي لأن تكون بهذا التعقيد.يمكنك بسهولة ضبط وضع التحديد لـ JFileChooser مثل هذا
JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fc.setMultiSelectionEnabled(false);
يمكنك قراءة المزيد من المرجع هنا كيفية استخدام منتقي الملفات