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

Composants Java Discussion :

problème avec une Jlist


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 66
    Par défaut problème avec une Jlist
    Salut,

    J'ai une Jlist dans laquelle je souhaite afficher tous les noms des fichiers (fichiers .txt) présents dans un dossier (C:/Historique), j'enregistre donc tous les fichiers dans un tableau de File (File[] liste), mais il faut ensuite que je copie tous les noms de ces fichiers dans un tableau de String (String[] alarmes), pour les afficher dans ma Jlist, je précise que le nombre de fichiers présents dans le dossier peut varier.

    voici mon code dans lequel j'affiche bien les nom de fichiers mais il faut que le code s'adapte au nombre de fichiers présents. :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    public class FenetreHistorique extends javax.swing.JFrame {
        String nomRepert="C://Historique";
        File repert=new File(nomRepert);
        File[] liste=repert.listFiles();
        String[] alarmes=new String[1];
        public FenetreHistorique() {
            initComponents();
            extraireAlarmes();
            this.setVisible(true);
        }
     
     
        public void extraireAlarmes(){
     
            this.jListHistorique.setSelectedIndex(1);
            jListHistorique.setModel(new javax.swing.AbstractListModel() {
     
                String[] alarmes={liste[0].getName(),liste[1].getName()};
                public int getSize() { return alarmes.length; }
                public Object getElementAt(int i) { return alarmes[i]; }
            });
        }
     
     
        private void initComponents() {
    ici se trouve le code généré par netbeans, que j'ai supprimé pour le forum
        }                       
     
        public static void main(String[] args){
            FenetreHistorique fenHisto=new FenetreHistorique();{
            }
        }
    Je me suis inspiré d'un livre pour écrire se code mais j'ai beau testé et chercher sur le net je n'arrive pas à faire ce que je souhaite, j'espère donc un petit coup de pouce de votre part pour me débloquer .

    Merci d'avance.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 30
    Par défaut
    Bonjour,

    A priori, si j'ai bien compris ton problème (tu me corriges si je me trompes) tu veux initialiser une JList avec les noms de tous les fichiers d'un répertoire.

    De mémoire, la JList comporte une méthode pour initialiser a partir d'un array de type Object :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    list.setListData(new Object[]{"element 1","element 2",..., "element N"});
    En plus, tu peux même donner cet array à la création de ta JList :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    JList liste = new JList(new Object[]{"element 1","element 2",..., "element N"});
    Il te suffit de construire ton array de type Object a partir de la liste que tu récupères.

  3. #3
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    Citation Envoyé par vince351
    [...] j'enregistre donc tous les fichiers dans un tableau de File (File[] liste), mais il faut ensuite que je copie tous les noms de ces fichiers dans un tableau de String (String[] alarmes), pour les afficher dans ma Jlist[...]
    Pas la peine... Tu peux passer directement ta Liste de File au constructeur de la JList. PAr défaut, ce qui sera affiché, c'est ce que renverra la méthode toString définie dans File.

    Si tu veux changer cela, tu dois redéfinir un ListCellRenderer. Je te conseille d'hériter du DefaultListCellRenderer et de l'écrire comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class MonCellRenderer extends DefaultListCellRenderer {
       public Component getListCellRendererComponent(JList list,
                                                  Object value,
                                                  int index,
                                                  boolean isSelected,
                                                  boolean cellHasFocus) {
          File file = (File)value; // ici tu récupères le fichier
          String aAfficher = file.getName(); // ici tu définis l'object que tu veux afficher
          return super.getListCellRendererComponent(list, aAfficher, index, isSelected, cellHasFocus); // tu fais un appel à la méthode getListCellRendererComponent définie dans DefaultListCellRenderer en lui passant la chaine a afficher.
       }
    }
    Il te faut ensuite l'ajouter à ta JList en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maJList.setCellRenderer(new MonCellRenderer());

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    Salut,
    pourquoi ne pas garder le principe du model associé à la JList, moi je trouve toujours cela plus propre, tu pourrais même lui passé carrément ton tableau de file et présicé dans ta classe qui etendra DefaultComboBoxModel par exemple (cela marche aussi pour les JLIst), exemple de code :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    class ListDataAdapter extends DefaultComboBoxModel {
    		private static final long serialVersionUID = 1L;
    		private List<File> list;
     
    		public ListDataAdapter(List<File> list) {
    			this.list= list;
    		}
     
    		public int getSize() {
    			return list.size();
    		}
     
    		public Object getElementAt(int index) {
    			return list.get(index);
    		}
     
    		public Object getSelectedItem() {
    			if (mModel.size() == 1) {
    				return list.get(0);
    			} else {
    				return super.getSelectedItem();
    			}
     
                 }
    //et puis avec un cell renderer :
    	private class ListRenderer implements ListCellRenderer {
    		private DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();
     
    		public Component getListCellRendererComponent(JList list, Object value,	int index, boolean isSelected, boolean cellHasFocus) {
    			JLabel renderer = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
    			// Teste s'il y a un libellé sélectionné.
    			if (value != null) {
    				File file = (File) value;
    				if (file.getName() != null) {
    					renderer.setText(file.getName());
    				} else {
    					renderer.setText(" ");
    				}
    			}
    			return renderer;
    		}
    	}
    ca peut paraitre un peu lourd comme ca.... c'est vrai, que dans ton cas le model n'est peut etre pas utile.... mais en fait cela simplifie un peut dans le sens où tu n'aura plus qu'a instancié ton model ListDataAdapter avec une liste de file, et celui ci se charge du reste, et tu n'a qu'a préciser le type de rendu qui t'intéresse par exemple l'affichage du nom du fichier...
    bref, ... j'espere que ca t'aidera ou que cela te donnera des idées pour la prochaine fois, face à une liste un peu plus complexe par exemple.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 66
    Par défaut
    Merci pour votre aide,
    J'ai essayé la méthode de tyrsensei qui me parait la plus simple. Mais je n'y arrive pas, j'ai donc fait un essai tout con :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.jListHistorique.setListData(new String [] {"essai";"essai2"});
    mais j'ai une erreur : "illegal start of type", où est l'erreur?

  6. #6
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    this.jListHistorique.setListData(new String [] {"essai","essai2"});

Discussions similaires

  1. problème avec une JList.addElement
    Par mayya dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 30/12/2008, 15h31
  2. [JBOSS] [Struts] Problème avec une application
    Par Tiercel dans le forum Wildfly/JBoss
    Réponses: 5
    Dernier message: 13/07/2004, 13h50
  3. Problème avec une instruction OUTER /Postgres
    Par Volcomix dans le forum Langage SQL
    Réponses: 14
    Dernier message: 21/04/2004, 16h56
  4. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29
  5. Problème avec une procédure stockée
    Par in dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/05/2003, 15h33

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