Bonjour à tous.
J'aurai voulu savoir s'il était possible de limiter un JFileChooser à un accès réseau. J'aimerai que l'utilisateur ne puisse accéder qu'au répertoire des machines sur le réseau dans lequel il se trouve. Mais je ne veux pas qu'il puisse accéder aux fichiers de la machine locale.
J'ai chercher un peu partout et je n'ai pas trouver comment faire.
Est-ce que quelqu'un aura
Network chooser à partir d'un JFileChooser
mer, 12/11/2008 - 16:53
#1
Network chooser à partir d'un JFileChooser
Hello,
Même si je ne vois pas trop l'intérêt de ta manoeuvre, je pense
qu'ile xiste une solution : (que je n'ai pas testé ceci dit)
D'après ce tuto java : http://java.sun.com/docs/books/tutorial/uiswing/components/filechooser.html
tu peux faire :
où la classe NetworkOnlyFileFilter est une classe que tu auras crée qui hérites de FileFilter, il te suffit de surcharger les méthods accept()
et getDescription(), bien que je ne suis pas sur que tu aies besoin de getDescription() ici.
Bonne chance,
Niroken
Je vois très bien ce que tu veux dire et je veux bien croire que ça peut marcher. Mais il me semble qu'il faut aussi indiquer au FileChooser un chemin root au chargement de la page et ce chemin root n'a pas d'existence physique (voisinage réseau) mais correspond à un répertoire virtuel de windows. C'est plutot à ce niveau là que j'ai un problème
Klod
C'est bon j'ai trouvé. Alors, en fait, le but du jeu était de trouver le chemin du répertoire virtuel "Voisinage Réseau" géré par windows afin de l'ajouter en tant que répertoire root du fileSystemView du JFileChooser. Pour celà, j'utilise la classe ShellFolder de java.
Voilà le bout de code :
Et voilà, il n'y a plus qu'à crée un JFileChooser avec ce fichier en tant que root et vous aurez un FileChooser qui ne vous permettra que d'accéder au favoris réseau et au voisinage réseau.
Et d'où sort-elle cette classe Java ?
De derrière des fagots d'arbres à café ? :)
Ca serait pas des fois une classe des packages sun.awt et compagnie ? Si oui, c'est bien que ça résolve ton problème aujourd'hui, mais dois savoir que tu ne peux pas compter sur la pérénité de cette classe dans l'avenir, ni même d'une JVM à l'autre, et ni même sur son existence si la JVM n'est pas de chez Sun.
C'est pas la peine d'être agressif comme ça. Si tu trouves que ma solution n'est pas convenable, donnes m'en une autre parce que ça fait 1 semaine que je cherche et c'est la seule solution que j'ai trouvé.
A bon entendeur
Hello,
Je vais mettre mon grain de sel mais je me pose une question....
Avec ta méthode énoncée plus haut on récupère en effet le dossier virtuel "voisinage réseau" et on le set en root dans le FileChooser.
Pour le setter en root j'ai fait :
JFileChooser vFileChooser = new JFileChooser(root);
pour reprendre ton exemple, or avec ça, le dossier sur lequel on arrive est bien voisnage réseau mais rien n'empeche l'utilisateur de revenir sur le bureau via la combobox ou alors le bouton "home".
Or comme j'ai bien envie de connaitre le dénouement de l'histoire, je voudrais savoir comment tu as fait :)
Cordialement,
Niroken
Il te dit pas ça pour être désagréable ...
Il te fait simplement remarquer que les classes provenant de ces packages ont un avenir plus qu'incertain au sein du package standard de java.
Du coup, il se peut très bien que lors d'une prochaine release de Java, elles disparaissent et que ton programme ne fonctionne plus à ce moment-là.
Après, il se peut que cela ne te gêne pas de limiter ton programme à certaines implémentations de la JVM ou certaines versions de Java. Mais c'est bien d'avoir ça en tête quand tu utilises ces classes ...
C bon c bon je prends pas la mouche. Je dis juste qu'il y a des façons de le dire.
Enfin bref, pour Niroken, en fait je créé un nouveau FileSystemView qui prend en répertoire root le répertoire que je lui passe en paramètre. De ce fait, on ne peut pas accéder aux autres répertoires.
Comme dit sylsau, merci à lui, je n'ai pas du tout voulu être désagréable en effet.
Des façons de le dire ? Je sais pas ... j'ai beau relire mon post je n'arrive pas à voir où j'ai été agressif.
Bon je saurai à l'avenir qu'il vaut mieux ne rien dire plutôt que de passer du temps pour essayer d'aider ou apporter une information à klod50.
Ouki merci :)