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 :

Afficher le résultat d'une fonction dans une JList


Sujet :

Composants Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 63
    Points : 28
    Points
    28
    Par défaut Afficher le résultat d'une fonction dans une JList
    Bonjour à tous,

    Je cherche à faire un portage de logiciel que que j'ai fait sous vb9,c'est un logiciel de création de clé usb bootable avec dos dessus.

    Comme vous vous en doutez avant de formater le périphérique cible, il faut pouvoir lister les lecteurs (Amovible,Fixe,CD-ROM,Disque virtuel,Non formaté,Réseau,Inconnu) et les charger dans une JList.


    Voila donc ce que j'ai besoin :
    5 JList = OK
    1 JComboxBox = OK
    1 JButton = OK
    2 jLabel = OK
    1 Procédure qui récupere les infos lecteur = J"ai une fonction incompléte
    1 timer qui verifie que l'ancien nombre de lecteur est égal au nouveau pour recharger la liste des lecteurs le cas échéant = Pas encore fait


    Voilà une portion de mon 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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
     
     
    package usbformattool;
     
    import java.awt.FlowLayout;
    import java.io.File;
    import javax.swing.JFrame;
    import javax.swing.JList;
    import javax.swing.JPanel;
    public class FenetreListes extends JFrame {
    	private JList liste1;
    	private JList liste2;
     
     
     	public FenetreListes(){
    		super();
    		build();//On initialise notre fenêtre
    	}
     
    	private void build(){
    		setTitle("USB format tool"); //On donne un titre à l'application
    		setSize(320,240); //On donne une taille à notre fenêtre
    		setLocationRelativeTo(null); //On centre la fenêtre sur l'écran
    		setResizable(true); //On permet le redimensionnement
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //On dit à l'application de se fermer lors du clic sur la croix
    		setContentPane(buildContentPane());
    	}
     
     
      public static String[] getRoots() {
        File[] roots = File.listRoots();
        String[] names = new String[roots.length];
        for (int i = 0; i < roots.length; ++i)
            names[i] = roots[i].getName();
        return names;
    }
     
     
      private JPanel buildContentPane(){
        JPanel panel = new JPanel();
    		panel.setLayout(new FlowLayout());
     
    		Object[] elements = new Object[]{getRoots().toString()};
    		liste1 = new JList(elements);
    		panel.add(liste1);
     
    		liste2 = new JList(elements);
    		panel.add(liste2);
     
      return panel;
    }
     
     
    	public JList getListe1(){
    		return liste1;
    	}
     
    	public JList getListe2(){
    		return liste2;
    	}
     
     
      public static void main(String[] args) {
        FenetreListes fenetre = new FenetreListes();
      	fenetre.setVisible(true);
        }
     
    }

    Voilà ca me fait une belle fenêtre qui sent le java tous neuf, mais impossible de charger mes JList .
    Je sais que normalement il ne faut pas demander du code tout cuit,mais il faut savoir que c'est ma 4éme tentative d'apprendre java et que chaque fois je laisse tomber pour 2 raisons:
    1: J'arrive jamais à récuperer le résultat de fonctions ou procédure présent dans la meme classr ou une autre.
    2: J'arrive pas a charger mes JList et JCombobox.

    Voilà j'espere qu'une ame charitable va passer par là, et m'expliquer ce qui raccroche.

  2. #2
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Il ne faut pas chercher à convertir le tableau de string renvoyé par getRoots en tableau d'Object. String hérite de Object, donc tu as déja un tableau d'Objects.

    Cela doit suffir pour initialiser ta JList :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste1 = new JList(getRoots());
    Ensuite il ne faut pas appeler la méthode setContentPane pour ajouter ton panel à ta JFrame. Il faut utiliser la méthode add de la classe Container dont hérite JFrame.
    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
    private void build(){
    		setTitle("USB format tool"); //On donne un titre à l'application
    		setSize(320,240); //On donne une taille à notre fenêtre
    		setLocationRelativeTo(null); //On centre la fenêtre sur l'écran
    		setResizable(true); //On permet le redimensionnement
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //On dit à l'application de se fermer lors du clic sur la croix
    		buildComponents();
    	}
    private JPanel buildComponents(){
        JPanel panel = new JPanel();
    		panel.setLayout(new FlowLayout());
     
    		Object[] elements = new Object[]{getRoots().toString()};
    		liste1 = new JList(elements);
    		panel.add(liste1);
     
    		liste2 = new JList(elements);
    		panel.add(liste2);
                    add(panel);
    }
    J'espère ne pas avoir fait d'erreurs, j'ai répondu un peu rapidement par manque de temps. Je ne pourrai répondre que demain si tu as des questions.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 63
    Points : 28
    Points
    28
    Par défaut Essais infructueux
    Merci cheryben,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste1 = new JList(getRoots());
    C'est la premiere chose que j'avais essayé,mais ca ne marche pas les JList n'apparaisse meme plus, même aprés afais la modification suivante.

    Une suggestion?

  4. #4
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    As-tu bien ajouté la dernière ligne de la fonction buildComponents telle que je l'ai mise? add(panel);

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 63
    Points : 28
    Points
    28
    Par défaut Fenetre blanche
    Bonjour cheryben,

    Oui je l'ai fait et j'obtient une fenetre blanche,voici le code actuel:

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
     
     
    package usbformattool;
     
    import java.awt.FlowLayout;
    import java.io.File;
    import javax.swing.JFrame;
    import javax.swing.JList;
    import javax.swing.JPanel;
    public class FenetreListes extends JFrame {
    	private JList liste1;
     
     	public FenetreListes(){
    		super();
    		build();
    	}
     
    	private void build(){
    		setTitle("USB format tool"); 
    		setSize(320,240); 
    		setLocationRelativeTo(null); 
    		setResizable(true); 
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    		buildContentPane();
    	}
     
     
           public static String[] getRoots() {
                  File[] roots = File.listRoots();
                  String[] names = new String[roots.length];
                  for (int i = 0; i < roots.length; ++i)
                     names[i] = roots[i].getName();
                  return names;
            }
     
     
            private JPanel buildContentPane(){
        		JPanel panel = new JPanel();
    		panel.setLayout(new FlowLayout());
     
    		liste1 = new JList(getRoots());
    		panel.add(liste1);
     
                    add(panel);
                    return panel;
             }
     
     
    	public JList getListe1(){
    		return liste1;
    	}
     
     
     
        public static void main(String[] args) {
            FenetreListes fenetre = new FenetreListes();
    	fenetre.setVisible(true);
        }
    }

    Bon maintenant il est possible que ce sois la fonction qui ne marche pas (je l'ai choper sur internet),mais comme je te l'ai dit dans mon premier message ce n'est pas une fonction que je veut mais une procedure qui me charge ma listbox ,comme ca je pourrait l'appeler a partir d'un timer qui verifie si le nombre de lecteur est toujour le meme.

    Donc la je te propose de laisser tomber le chargement a partir d'une fonction/objet (sauf si tu trouve ce qui ne va pas sans trop te creuser les meninges) et de me montrer si tu le veut bien un exemple a partir du code existant ,comment appeler une procedure (public je suppose) lors du chargement,et dans cette procedure charger mes JList dans une boucle for each (Car on ne sais pas combien de lecteur il y a) et pour emuler tous ca ,on va ce servir de cet objet :

    Object[] racineLecteurs= new Object[]{"A:/","B:/","C:/","D:/","E:/","F:/","L:/"};

    merci pour ton aidde cheryben

  6. #6
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Pour toi quelle est la différence entre une fonction et une procédure?

    En java, il n'existe que des méthodes, qu'on appelle parfois par abus de langage des fonctions. Mais c'est toujours la même chose, ce sont des méthodes à l'intérieur de classes.

    Sinon après un debug rapide en copiant exactement ton code, il s'avère que l'erreur est toute simple, il y a une erreur dans getRoots(). Il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    names[i] = roots[i].getPath(); // au lieu de getName()
    Il est inutile que ta méthode buildContentPane renvoi le JPanel.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 63
    Points : 28
    Points
    28
    Par défaut super ca marche
    Merci ca marche

    Une fonction ,retourne un résultat,une procédure affiche directement le résultat,oui je me souvient de mes cours de java ,il y a que des méthodes.

    apres avoir regarder la ligne names[i] = roots[i].getPath();
    je me suis apercu que je pouvait récuperer presque toutes les informations que j'avait besoin , c'est a dire :
    roots[i].getName();
    roots[i].getTotalSpace()
    le type de lecteur? (fixe,removable,etc..)
    le format du lecteur? (ntfs,fat,etc..)

    donc en premier lieu ,j'aimerai transformer public static String[] getRoots() en public void chargeListe ()

    et charger mes JList dedans,en ce qui concerne l'appel de la méthode je suppose que ca ce fait comme ca?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        public static void main(String[] args) {
            FenetreListes fenetre = new FenetreListes();
    	fenetre.setVisible(true);
                 chargeListe ();
        }

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 63
    Points : 28
    Points
    28
    Par défaut modification
    J'ai donc fait mes modifications,resultat la liste 1 fonctionne à merveille,par contre la liste 2 c'est pas gagner,meme avec une boucle for each.

    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
             public  void chargelist (){
                  File[] roots = File.listRoots();
                 long[]  taille = new long[roots.length];
     
                  for (int i = 0; i < roots.length; ++i)
                     taille[i]= roots[i].getTotalSpace();
     
                  liste1 = new JList(roots);
                  liste2 = new JList(taille.toString());
            }
     
     
            private JPanel buildContentPane(){
        		JPanel panel = new JPanel();
    		panel.setLayout(new FlowLayout());
     
                     chargelist ();
     
    		panel.add(liste1);
                    panel.add(liste2);
     
     
                    add(panel);
                    return panel;
             }
    Qu'est ce que tu en pense?


    Il est inutile que ta méthode buildContentPane renvoi le JPanel.
    Si je le met pas j'ai une erreur "missing return statment"

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 63
    Points : 28
    Points
    28
    Par défaut ca marche
    Bon ca y est j'ai reussi,voila le code que j'ai fait

    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
          public  void chargelist (){
                  File[] roots = File.listRoots();
                  String[] taille = new String[roots.length];
                  String[] names = new String[roots.length];
                  String[] unites = new String[] { " octets", " Ko", " Mo", " Go", " To" };
                  DecimalFormat df = new DecimalFormat("####.##");
     
                  for (int i = 0; i < roots.length; ++i){
                    double tmpSize = roots[i].getTotalSpace();
                    int u = 0;
     
                    while (tmpSize >= 1024) {
                       tmpSize /= 1024.0;
                       u++;
                    }
                       taille[i]= df.format(tmpSize) + unites[u];
                       names[i]= roots[i].getName();
                  }
     
                  liste1 = new JList(roots);
                  liste2 = new JList(taille);
                  liste3 = new JList(names);
            }
    Par contre la fonction names ne marche pas,elle ne retourne rien,mais si mes souvenir son exacte je peut utiliser un autre packagge que sun,genre apache.

    Il me manque encore 2 réponses pour que je puisse clore ce topic

    1: Comment vider une liste.
    2: Comment ajouter 1 éléments a une liste déjà existante.

  10. #10
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Citation Envoyé par daviddu54 Voir le message
    Si je le met pas j'ai une erreur "missing return statment"
    Si tu enlèves le retour du JPanel, il faut également changer la définition de la méthode, tu devrais revoir tes cours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void buildContentPane(){...}

    Citation Envoyé par daviddu54 Voir le message
    Il me manque encore 2 réponses pour que je puisse clore ce topic

    1: Comment vider une liste.
    2: Comment ajouter 1 éléments a une liste déjà existante.
    Pour gérer correctement l'insertion d'éléments à la liste, il faut utilise un modèle de données, par exemple un DefaultListModel. Pour y manipuler des éléments, tu as les méthodes addElement, add et clear. Il faut donc modifier ton code qui créé les JList pour utiliser le constructeur JList(ListModel dataModel) .

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 63
    Points : 28
    Points
    28
    Par défaut merci
    Merci pour tout chery ben

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

Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. Réponses: 2
    Dernier message: 04/01/2015, 15h28
  3. [XSLT 1.0] Mettre le résultat de l'appel d'une fonction dans une variable
    Par Giovanny Temgoua dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 16/01/2012, 17h47
  4. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  5. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04

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