2009-12-01 3 views
0

Je travaille sur un projet, en Java, où l'utilisateur doit choisir un fichier à télécharger via un jfilechooser. Y a-t-il un moyen de rendre le champ de texte en lecture seule afin que vous puissiez seulement choisir les fichiers en cliquant dessus, et non en écrivant dans le champ de texte. J'espère que j'ai fait mon problème clair, Djava filechooser

+0

sur pure curiosité, est le fichier nommé "example.buab"? –

Répondre

1

Je ne crois pas que ce soit directement possible - et à en juger par the API, je crois que ce n'est pas le cas. Vous pourriez probablement simuler en enregistrant un écouteur qui a effacé la zone de texte après chaque pression de touche. Cependant, êtes-vous sûr que vous voulez faire? Personnellement, je serais très contrarié si j'utilisais un sélecteur de fichier qui était paralysé de cette façon, surtout si j'avais copié un chemin de fichier vers le presse-papiers de quelque part et que je devais descendre manuellement à travers un tas de répertoires, entre autres .

Y a-t-il une raison particulière pour laquelle vous voulez paralyser l'interface utilisateur? Parce que je ne vois aucune raison légitime de le faire ...

+0

bien, c'était juste un moyen facile de s'assurer que le fichier sélectionné était un fichier réel. Je suppose que je vais juste devoir vérifier si le fichier existe avant que je commence le téléchargement – ev00l

1

Ce n'est pas vraiment une tentative de réponse, mais je demanderais pourquoi vous voudriez que le champ de texte soit seulement lu. Vous limitez les utilisateurs et pour quel bénéfice exactement? Changer le comportement standard attendu du sélecteur de fichier n'est généralement pas une bonne approche, sauf si vous avez une très bonne raison de le faire.

Donc, désolé, pas vraiment une réponse, mais s'il vous plaît pensez à pourquoi vous voulez faire cela. En tant que préférence personnelle, j'aime pouvoir écrire dans le champ de texte. Cela me permet de coller, ce qui permet une navigation extrêmement rapide et simple d'un répertoire à l'autre.

+0

Je peux voir pourquoi c'était une manière paralysante de s'assurer que le fichier existe. Merci pour l'aide – ev00l

0

Je pense que la seule façon de le faire serait en fournissant votre propre FileChooserUI et en le réglant via setUI() sur votre JFileChooser. Ce n'est probablement pas beaucoup de travail à faire quand vous sous-classez une implémentation existante à partir des paquets javax.swing.plaf, mais le problème est que vous contournez l'ensemble du mécanisme PLAF; changer le global L & F ne fonctionnerait alors pas pour votre sélecteur de fichier.

2

Si votre intention est de vous assurer que l'utilisateur a sélectionné un fichier plutôt qu'un répertoire (indiqué par vos réponses à d'autres réponses), vous pouvez utiliser FileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);. Toutefois, il s'agit du paramètre par défaut lorsque vous instanciez le sélecteur de fichier. Par conséquent, à moins que votre code ne change à un moment donné, vous n'avez pas besoin de le définir explicitement.

Pour votre plus grand plaisir: http://java.sun.com/docs/books/tutorial/uiswing/components/filechooser.html

2

Si vous voulez vous assurer que le nom de fichier saisi est valide avant de fermer le fichier chooser alors vous devriez être en mesure de faire quelque chose comme ceci:

JFileChooser chooser = new JFileChooser(...) 
{ 
    public void approveSelection() 
    { 
     if (getSelectedFile().exists()) 
      super.approveSelection(); 
     else 
      JOptionPane.showMessageDialog(this, "Selected file does not exist"); 
    } 
}; 
+0

Merci beaucoup, je vais essayer cela! – ev00l