IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

JList et fichiers


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 44
    Par défaut JList et fichiers
    Bonjour,

    Je cherche actuellement à afficher une liste de fichiers (obtenu via un ListFiles()) dans un JList. Facile me direz vous, un petit jlist1.setListData(File[])...

    Malheureusement, et considérant le fait que je suis un tordu, je ne veux afficher que le nom du fichier (sans l'extension). Ce qui donne un truc comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    		ListModel test = new AbstractListModel() {
    			/**
                             * 
                             */
    			private static final long serialVersionUID = 1L;
     
    			File tmpFolder = new File("C:\\Temp");
    			File[] ls = tmpFolder.listFiles();
    			@Override
    			public int getSize() {
    				return ls.length;
    			}
     
    			@Override
    			public Object getElementAt(int index) {
    				return ls[index].getName().substring(0,ls[index].getName().lastIndexOf("."));
    //				return ls[index];
    			}
    		};
    Là j'obtiens ce que je veux (pour le moment).
    Les choses se corsent là :
    Je veux pouvoir récupérer l'Objet de type File lorsque je fait un truc du genre list1.getSelectedValue()...

    J'espère ne pas devoir en arriver à faire persister mon tableau (ls dans l'exemple) et que je marche par indice sélectionné <=> objet dans le tableau.
    Si c'est la seule solution tant pis, mais je prie pour qu'une solution plus.... "élégante".

    Merci d'avance et ne soyez pas trop durs avec moi : je débute encore en Java.

  2. #2
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 679
    Par défaut
    Il faut donc faire retourne un File au getElementAt()

    Pour garder l'affichage du nom de fichier réduit, une solution efficace mais un peu compliquée serait de définir un nouveau renderer en créant une classe ListCellRenderer et l'utilisant avec: setCellRenderer(ListCellRenderer cellRenderer)
    le renderer étant l'objet en charge de créer le composant swing à afficher dans la JListe à partir de l'objet.
    Le renderer par défaut se contente d'utiliser le toString() de l'objet.

    Une solution plus simple serait d'utiliser justement ce toString() en utilisant une classe qui hérite de File:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class FileNamed extends File{
        public FileNamed(File f) {
            super(f.getPath());        
        }
     
        @Override
        public String toString() {
            return getName().substring(0,getName().lastIndexOf("."));
        }
    }
    et donc dans le getElementAt tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return new FileNamed(ls[index]);
    Ainsi tu as bien un objet de type File qui retournera le texte du toString.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 44
    Par défaut
    Je vais essayer cette solution dès demain matin.
    Je ne comprends pas cependant comment cela règle le soucis.... Cela surcharge le toString() effectué par le renderer par défaut de la JList ?
    En tout cas, merci infiniment : j'apprends énormément grâce à vous et à ce forum.

    Dans un futur plus lointain, je testerais la solution de la création de mon propre renderer : est ce que c'est bien cela qui permet de personnaliser la liste (image, taille des caractères, etc.) ?

    Merci encore !

  4. #4
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 679
    Par défaut
    Le renderer par défaut de la JList utilise la méthode toString() des objets retourné par le getElementAt(int index) du modèle, pour créer les composants swing(des JLabel si mes souvenis sont bons) utilisés à l'intérieur de la JList.

    Donc pour eviter d'avoir a modifier ce renderer, je fais retourner à getElementAt(int index) un objet qui en hérite de File mais avec avec un toString() adapté à ton problème.

    Je n'ai pas testé cet idée, mais elle devrait fonctionner.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 44
    Par défaut
    D'accord. Merci pour ces précisions

    edit : La solution marche à la perfection ! J'aimerais tellement avoir cette connaissance de Java...

    Merci beaucoup !!!


    Ne em lassant pas de ton aide (mais si, j'essaye comme un fou, je lis la doc, mais y a un tru que je comprends pas), est ce que tu pourrais jeter un oeil sur ce topic, qui hérite de celui là ?
    http://www.developpez.net/forums/d84...p-entre-jlist/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lister contenu d'un fichier dans un JList
    Par sabeurios dans le forum Composants
    Réponses: 4
    Dernier message: 09/01/2015, 10h57
  2. Remplir un jlist à partir d'un fichier txt
    Par the watcher dans le forum EDT/SwingWorker
    Réponses: 16
    Dernier message: 30/12/2014, 10h28
  3. Problème avec la gestion des fichier dans une JList()
    Par chebmo1986 dans le forum Composants
    Réponses: 3
    Dernier message: 18/02/2009, 23h49
  4. fichier mappé en mémoire
    Par WinBernardo dans le forum Delphi
    Réponses: 7
    Dernier message: 01/12/2006, 09h38
  5. [JList] Lecture des données sauvegardées dans un fichier
    Par Myogtha dans le forum Composants
    Réponses: 7
    Dernier message: 10/06/2004, 21h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo