Je souhaite que l'utilisateur sélectionne uniquement les fichiers à partir de fichiers existants et ne souhaite pas lui permettre de saisir le nom du fichier.
Alors comment pouvons-nous désactiver le champ de saisie de fichier dans JFileChooser?
Merci.Comment désactiver le champ de saisie de fichier dans JFileChooser?
Répondre
Ceci est une extension à une solution publiée à http://www.mikepot.com/1493.html. La différence est que les simples clics sont convertis en double-clics. Cela semble fonctionner mieux sous Ubuntu où les doubles clics semblent être traduits en un seul clic.
package com.troyware.inventoryItemManager;
import java.awt.Component;
import java.awt.Container;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JList;
/**
* This file chooser prevents users from changing file names and thus should facilitate navigating to the correct file
* by precluding the user from getting stuck when single clicking a folder name
*
* @author http://www.mikepot.com/1493.html
* slightly modified by Phil Troy, www.PhilTroy.com, to convert single click into double click
*/
public class MyFileChooser extends JFileChooser
{
public MyFileChooser()
{ JList list = findFileList(this);
for (MouseListener l : list.getMouseListeners())
{ if (l.getClass().getName().indexOf("FilePane") >= 0)
{ list.removeMouseListener(l);
list.addMouseListener(new MyMouseListener(l));
}
}
}
private JList findFileList(Component comp)
{ if (comp instanceof JList) return (JList)comp;
if (comp instanceof Container)
{ for (Component child : ((Container)comp).getComponents())
{ JList list = findFileList(child);
if (list != null) return list;
}
}
return null;
}
private class MyMouseListener extends MouseAdapter
{
MyMouseListener(MouseListener listenerChain)
{ m_listenerChain = listenerChain;
}
public void mouseClicked(MouseEvent event)
{ if (event.getClickCount() > 0)
{ m_listenerChain.mouseClicked(new MouseEvent(event.getComponent(), event.getID(), event.getWhen(), event.getModifiers(), event.getX(), event.getY(), 2, false));
}
}
private MouseListener m_listenerChain;
}
private static final long serialVersionUID = 1L;
}
Je pense que ce que vous voulez vraiment, c'est que l'utilisateur sélectionne un fichier existant.
Vous écrivez un programme d'écoute d'action pour que JFileChooser vérifie et s'assure que le fichier existe.
Vous voulez toujours l'utilisateur d'être en mesure de taper dans le champ de saisie de fichier afin qu'il puisse limiter ce qui est affiché dans le JFileChooser,
Par exemple, si les types d'utilisateurs *.txt
, seuls .txt
fichiers sont affichés. Si l'utilisateur tape one*
, seuls les fichiers commençant par les lettres o-n-e sont affichés.
Entièrement d'accord avec Gilbert. Mais dans le cas contraire, si vous voulez réellement ce que vous avez demandé: Ce champ de texte défini à l'intérieur de l'implémentation de plaf, et vous pouvez utiliser, disons réflexion, l'obtenir et le changer, ou vous pouvez essayer d'itérer des composants enfants espérant que le seul JTextArea est celui que vous cherchez. L'exemple suivant utilise la réflexion et fonctionne pour un look métallique et la sensation:
import java.awt.Frame;
import java.lang.reflect.Field;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.plaf.metal.MetalFileChooserUI;
public class FileChooser {
public static void main(String[] args) throws Exception{ Frame f = new JFrame(); JFileChooser jFileChooser = new JFileChooser(); MetalFileChooserUI ui = (MetalFileChooserUI)jFileChooser.getUI(); Field field = MetalFileChooserUI.class.getDeclaredField("fileNameTextField"); field.setAccessible(true); JTextField tf = (JTextField) field.get(ui); tf.setEditable(false); tf.setEnabled(false); jFileChooser.showDialog(f, "Select"); f.dispose(); }
}
Brillant! C'est exactement ce que je voulais faire (j'ai cette option appelée "exporter tout", qui correspond aux éléments sur une liste, donc ils ont déjà leurs noms, et je veux juste sélectionner le dossier). –
Vous pouvez passer par la hiérarchie des enfants des composants (comme Yuriy mentionné). Voici la fonction pour trouver JTextField dans la hiérarchie des composants. Il trouve 1st JTextField (en espérant que le champ de texte nécessaire est le seul dans FileChooser).
{
JFileChooser fc = new JFileChooser();
disableTF(fc);
}
public boolean disableTF(Container c) {
Component[] cmps = c.getComponents();
for (Component cmp : cmps) {
if (cmp instanceof JTextField) {
((JTextField)cmp).setEnabled(false);
return true;
}
if (cmp instanceof Container) {
if(disableTF((Container) cmp)) return true;
}
}
return false;
}
- 1. Comment désactiver la recherche de dictionnaire dans le champ de saisie du navigateur Web?
- 2. Comment désactiver l'opération de fichier, la sélection de fichier et le panneau de filtre de JFileChooser (JAVA Swing)?
- 3. Comment réorganiser le champ de saisie
- 4. champ Fichier d'entrée au champ de saisie de texte
- 5. Comment désactiver la saisie semi-automatique du champ de saisie avec EditorFor?
- 6. Comment taper dans le champ de saisie avec WicketTester?
- 7. Comment réinitialiser le champ de saisie dans l'iframe?
- 8. Comment désactiver la saisie manuelle pour le champ Jpu Datepicker de l'interface utilisateur?
- 9. Android - TimePicker sélectionner le bouton et le champ de saisie
- 10. Comment enregistrer un fichier en utilisant JFileChooser?
- 11. Comment puis-je désactiver le bouton d'envoi jusqu'à ce que le texte soit entré dans le champ de saisie?
- 12. Zone de saisie HTML - Désactiver
- 13. Comment rendre un champ de saisie facultatif?
- 14. Impossible de styler le champ de saisie dans IE6, Pourquoi?
- 15. se concentrant dans le champ de saisie à droite chiffres
- 16. Vb.net Champ de saisie Fonction
- 17. Ajuster le fichier sélectionné à FileFilter dans un JFileChooser
- 18. Stylisation d'un champ de saisie
- 19. Comment réinitialiser le clavier d'un champ de saisie?
- 20. Comment pré-remplir un JFileChooser va "nom de fichier"?
- 21. comment réinitialiser le champ de saisie après la validation échoue?
- 22. Désactiver la saisie semi-automatique dans textfield dans Django?
- 23. Modification d'un champ de saisie de formulaire
- 24. Comment transmettre une valeur dans ce champ de saisie?
- 25. remplacer le champ de saisie des données de mysql php
- 26. Champ de saisie avec méthode de saisie personnalisée
- 27. Comment placer une image HINT dans un champ de saisie?
- 28. Positionnement d'un champ de saisie de commentaire
- 29. Pointant vers un champ de saisie
- 30. html options de champ de saisie
@all: Merci beaucoup. :) – Supereme