سؤال

أريد قصر المستخدمين على الدليل والأدلة الفرعية الخاصة به ولكن زر "الدليل الأصلي" يسمح لهم بالتصفح إلى دليل عشوائي.

كيف ينبغي لي أن أفعل ذلك؟

هل كانت مفيدة؟

المحلول

ربما يمكنك القيام بذلك عن طريق تعيين الخاص بك 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);

لقد اكتمل حل ألين تقريبًا.ثلاث مشاكل مفتوحة للحل:

  1. يؤدي النقر فوق زر "الصفحة الرئيسية" إلى إخراج المستخدم من القيود
  2. لا يمكن الوصول إلى DirectoryRestrictedFileSystemView خارج الحزمة
  3. نقطة البداية ليست الجذر

  1. قم بإلحاق @Override بـ DirectoryRestrictedFileSystemView

public TFile getHomeDirectory() { return rootDirectories[0]; }

  1. تعيين الطبقة والمنشئ public

  2. يتغير 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);

يمكنك قراءة المزيد من المرجع هنا كيفية استخدام منتقي الملفات

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top