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

Interfaces Graphiques en Java Discussion :

affichage de résultat dans un interface au lieu de console


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut affichage de résultat dans un interface au lieu de console
    Bonjour,
    J’ai créé un programme qui contient deux listes de type (ArrayList) appelées (temps et autres). Donc le programme est composé de deux méthodes. Une méthode pour le remplissage du ArrayList et l'autre pour l'affichage en JFrame. Mais parce que je suis débutante en java j'ai réussis seulement à la construction de l'interface. Et je ne sais pas comment je peux faire l'appel de la méthode qui remplit et affiche les deux liste.
    Dans mon interface j'ai construit deux JTextArea. Pour que chaque zone de texte affiche une liste.
    Comment je peux appeler cette méthode afin d'afficher les deux listes dans les zones de textes? Et pensez-vous que c'est mieux d'utiliser JTable au lieu de JTextArea si oui comment?

    c'est le code de l'interface:
    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
    public static void window(){
    		JScrollPane texteAsc;
    		JScrollPane texteAsc1;
    		JLabel label = new JLabel("Extraction de connaissances");
    		JFrame window=new JFrame("extraction connaissances"); 
    		JTextArea grandeZone = new JTextArea(7,10);
    		JTextArea grandeZone1 = new JTextArea(7, 10);
    		texteAsc = new JScrollPane(grandeZone);
    		texteAsc1 = new JScrollPane(grandeZone1);
    		JPanel container = new JPanel();
    		JPanel surfTotPanel = new JPanel();
    		JPanel surfTotPanel2 = new JPanel();
    		surfTotPanel.setLayout(new BoxLayout(surfTotPanel,BoxLayout.Y_AXIS));
    		Dimension dimension = new Dimension(200,400);
    		surfTotPanel.setPreferredSize(dimension);
    		surfTotPanel2.setLayout(new BoxLayout(surfTotPanel2,BoxLayout.Y_AXIS));
    		Dimension dimension2 = new Dimension(200,400);
    		surfTotPanel2.setPreferredSize(dimension2);
    		surfTotPanel.add(texteAsc1);
    		surfTotPanel2.add(texteAsc);
    		container.setLayout(new BorderLayout());
    		label.setHorizontalAlignment(JLabel.CENTER);
    		container.add(label, BorderLayout.NORTH);
    		container.add(surfTotPanel2, BorderLayout.EAST);
    		container.add(surfTotPanel,BorderLayout.WEST);
    		window.setContentPane(container);
    		window.setVisible(true);
    		window.setSize(500,400);
    		Font police = new Font("Andalus", Font.CENTER_BASELINE, 25);
    		label.setFont(police);
    		label.setForeground(Color.blue);
    c'est le code de la méthode:
    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
    private static void parserFichier(List<Element> elmts, List<String> temps, List<String> autres) throws ClassNotFoundException{
    		   for (Element elmt : elmts) {
    		      List<Element> children = elmt.getChildren();
    		      if(("instant".equals(elmt.getName()))||("intervalle".equals(elmt.getName()))) {
    		             collect( temps, elmt, children.isEmpty() );
    		             for (Element child : children) {
    		            	 collect(temps,child,children.isEmpty());
    		             }
    		      }
    		      else{
    		             collect( autres, elmt, children.isEmpty() );
     
    		      if(!children.isEmpty()){
    			  parserFichier( children, temps, autres ); 
    		      }
    		      }
    		   }
    		}

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il n'y a pas de mieux ou pire : c'est selon ce que tu as envies. Dans un JTextArea, on peut mettre n'importe quel texte, donc, à fortiori, une liste. Mais elle sera affiché comme dans un éditeur de texte (par exemple, exactement comme te l'afficherait un System.out.println()), mais pas forcément : tu peux aussi mettre chaque élément dans une liste à puces comme ça :
    Temps :
    • xxx
    • yyy
    • zzz

    Autres :
    • aaa
    • bbb
    • cccc
    Mais un JTextArea, à la base, c'est un éditeur : c'est fait pour saisir. Si tu veux afficher, sans que l'utilisateur puisse modifier, il faudra verrouiller un certain nombre de chose. Par contre, tu bénéficiera d'un copier/coller très facile à mettre en place.
    La JTable, elle, affiche des lignes de colonnes : un peu plus longue à mettre en place, elle permet de mettre en place plus facilement des fonctionnalités de tri, de filtres, d'ajouter des informations (des colonnes).
    Il y a aussi la JList, le JTree, voir même un affichage complètement graphique à base de Canvas (comme les nuages de mots qu'on vois sur beaucoup de sites Internet, par exemple)...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ahlemrhayem Voir le message
    Dans mon interface j'ai construit deux JTextArea. Pour que chaque zone de texte affiche une liste.
    Comment je peux appeler cette méthode afin d'afficher les deux listes dans les zones de textes?
    En fait, comme je le disais dans mon message précédent, plus généraliste : un JTextArea est un mini éditeur de texte. On peut lui passer tout simplement n'importe quelle String. Donc on peut déjà lui passer exactement la même chaîne qui est utilisée lors d'un System.out.println() : celle qu'on obtient en appelant toString() sur l'instance de List.

    Donc, exactement comme tu a écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ... parseFichier(...);
    System.out.println("Temps : " + temps);
    System.out.println("Autres : " + autres);
    Tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ... parseFichier(...);
    tempsTextArea.setText( temps.toString() );
    autresTextArea.setText( autres.toString() );
    Mais l'affichage sera assez basique. Maintenant, à toi de nous dire comment tu voudrais que ça s'affiche si nécessaire.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    En fait, comme je le disais dans mon message précédent, plus généraliste : un JTextArea est un mini éditeur de texte. On peut lui passer tout simplement n'importe quelle String. Donc on peut déjà lui passer exactement la même chaîne qui est utilisée lors d'un System.out.println() : celle qu'on obtient en appelant toString() sur l'instance de List.

    Donc, exactement comme tu a écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ... parseFichier(...);
    System.out.println("Temps : " + temps);
    System.out.println("Autres : " + autres);
    Tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ... parseFichier(...);
    tempsTextArea.setText( temps.toString() );
    autresTextArea.setText( autres.toString() );
    Mais l'affichage sera assez basique. Maintenant, à toi de nous dire comment tu voudrais que ça s'affiche si nécessaire.
    Merci beaucoup,
    Donc pour le moment je reste avec l'idée de l'utilisation de JTextArea. Et s'il y'a changement d'idée et je trouve des difficultés alors je pose ça
    Donc pouvez-vous me dire comment je peux afficher les deux listes chacun dans une TextArea.
    Pour le premier code je pense que l'affichage est en console.
    Mais pour le deuxième code malheureusement je ne connais pas ou je le mets. je mets ce code dans la méthode window() mais c'est affiché comme erreur.
    Je pense que je dois faire un parcours pour chaque élément de liste pour l'affiché mais je ne sais pas comment et ou au niveau de code.

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Quelle erreur ? Parce que la méthode parseFichier pourrait être appelée dans ta méthode windows (aussi faut-il non seulement passer les bons paramètres, et surtout qu'ils soient tous initialisé).

    Bien sûr, dans l'exemple que je t'ai donnée, tu dois remplacer les parties nécessaires avec les bons noms de variables (comme les textArea que tu as appelés grandeZone et grandeZone1...) et l'appel de parseFichier exactement de la manière qu'on t'a donné dans l'autre discussion.


    Pour construire la chaîne finale qui s'affichera dans chaque panel, en théorie, on devrait construire un Document, mais c'est un peu complexe pour un débutant (d'autant plus que ton texte est assez simple) : le plus simple est de construire une chaîne de caractères et de la passer au JTextArea par setText(). Tu peux construire ta chaîne par concaténation : c'est pas la manière la plus performante, mais dans ton cas tu n'as pas vraiment besoin de performance à priori (sinon, il faudrait utiliser la classe StringBuilder pour construire la chaîne).

    Exemple par concaténation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    String texte = "Le temps :"; 
    for( String temp : listTemps ) {
        texte += "\n"; // pour passer à la ligne suivante
        texte += "- "; // un tiret stylisé
        texte += temp; // le texte de la ligne
    }
    // et à la fin :
    textArea.setText(texte); // ou textArea est une variable de type JTextArea
    Avec StringBuilder, ça donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    StringBuilder texte = new StringBuilder("Le temps :"); 
    for( String temp : listTemps ) {
        texte.append( "\n" ); // pour passer à la ligne suivante
        texte.append( "- " ); // un tiret stylisé
        texte.append( temp ); // le texte de la ligne
    }
    // et à la fin :
    textArea.setText(texte.toString()); // ou textArea est une variable de type JTextArea
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Merci,
    Le problème que je trouve même maintenant après vos propositions est qu'il existe une erreur au niveau de l'appel de deux tableaux (temps et autres) c'est indiqué comme erreur pour la méthode window. Hors ils sont bien définis dans le void main () et aussi ils sont définis dans la méthode parserFichier().

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Quelle erreur ? Parce que la méthode parseFichier pourrait être appelée dans ta méthode windows (aussi faut-il non seulement passer les bons paramètres, et surtout qu'ils soient tous initialisé).

    Bien sûr, dans l'exemple que je t'ai donnée, tu dois remplacer les parties nécessaires avec les bons noms de variables (comme les textArea que tu as appelés grandeZone et grandeZone1...) et l'appel de parseFichier exactement de la manière qu'on t'a donné dans l'autre discussion.
    Bonjour,
    les paramètres soient initialisé : c'est a dire que je dois écrire :
    temps=[instant, intervalle, instan-debut, instant_fin] et même chose que autres.
    si comme ça alors c'est pas logique parce que je fais pas ce programme seulement pour ce fichier mais c'est pour n'importe quel fichier qui contient des éléments de temps et autres éléments non.
    S'il vous plait je besoin de votre aide je suis perdue

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ahlemrhayem Voir le message
    Merci,
    Le problème que je trouve même maintenant après vos propositions est qu'il existe une erreur au niveau de l'appel de deux tableaux (temps et autres) c'est indiqué comme erreur pour la méthode window. Hors ils sont bien définis dans le void main () et aussi ils sont définis dans la méthode parserFichier().
    J'ai demandé "Quelle erreur ?" : j'ai bien compris que tu avais une erreur, mais je ne sais pas laquelle, je n'ai aucun moyen de deviner. Quel message d'erreur en clair ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ahlemrhayem Voir le message
    Bonjour,
    les paramètres soient initialisé : c'est a dire que je dois écrire :
    temps=[instant, intervalle, instan-debut, instant_fin] et même chose que autres.
    si comme ça alors c'est pas logique parce que je fais pas ce programme seulement pour ce fichier mais c'est pour n'importe quel fichier qui contient des éléments de temps et autres éléments non.
    S'il vous plait je besoin de votre aide je suis perdue
    Non, tu as différents éléments dans ton programme. Entre autres :

    • un qui parse un fichier xml vers un arbre JDOM
    • un qui parcourt ce JDOM pour collecter des données dans 2 listes
    • un qui affiche une fenêtre dans laquelle on veut afficher ces 2 listes


    La programmation, c'est pour une grosse partie lier différentes parties d'un programme. Tu as pu afficher le résultat du (2) dans la console. C'est exactement la même chose pour récupérer les 2 listes pour les afficher dans la fenêtre. Le même appel, simplement au lieu de passer les listes temps et autres à la méthode println() de System.out, on va les utiliser dans une méthode qui va remplir JTextArea (dont je t'ai donné des exemples dans un post précédent) : cette méthode peut être ta méthode windows, puisque c'est celle qui créé les 2 JTextArea (pour être plus clean, on devrait créer plusieurs petites méthodes qui s'appellent les unes les autres, mais on va rester comme ça pour l'instant : une seule méthode, windows).

    Maintenant tu as une classe (je ne sais pas comment tu l'as appelée) dans laquelle tu as une méthode parseFichier(...). Tu as une autre classe dans laquelle tu as la méthode windows(), dans laquelle tu dois appeler la méthode parseFichiers() de l'autre classe... A ton avis, quels sont les moyens qu'offre java pour appeler, dans le code d'une méthode, une méthode d'une autre classe ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Merci joel pour vos aides.
    j'utilise un seul classe qui contient les deux méthodes:
    voici le code complet:
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.io.File;
    import java.io.IOException;
    import java.util.List;
    import org.jdom2.Document;
    import org.jdom2.Element;
    import org.jdom2.JDOMException;
    import org.jdom2.input.SAXBuilder;
    import java.util.ArrayList; 
     
    import javax.swing.BoxLayout;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
     
     
    public class Affichage {
     
     
     
    	public static void main(String[] args) throws ClassNotFoundException {
     
    		/* Création du parseur */
    		SAXBuilder builder = new SAXBuilder();
     
    		File fichierXML = new File("Exercice1.xml");
    		Document document; 
     
     
    		try {
    			/* Parsing du fichier */
    			document = builder.build(fichierXML);
     
    			/* Racine du document XML : dans notre cas <diagramme> */
    			Element rootNode = document.getRootElement();
    			List<Element> elmts=rootNode.getChildren();
    			List<String> temps = new ArrayList<String>();
    		    List<String> autres = new ArrayList<String>();
    			parserFichier(elmts,temps,autres);
    			window();
     
     
    		} catch (JDOMException e) {
    			e.printStackTrace(System.out);
    		} catch (IOException e) {
    			e.printStackTrace(System.out);
    		}
     
    	}
    	private static void addOnce(List<String> list, String text) {
    		   if ( !list.contains(text) ) list.add(text);
    		}
    	private static void collect(List<String> list, Element elmt, boolean addText) {
    	    addOnce(list, elmt.getName());
    	    if ( addText ) {
    	        addOnce(list, elmt.getText());
    	    }
    	}
     
    	private static void parserFichier(List<Element> elmts, List<String> temps, List<String> autres) throws ClassNotFoundException{
    		   for (Element elmt : elmts) {
    		      List<Element> children = elmt.getChildren();
    		      if(("instant".equals(elmt.getName()))||("intervalle".equals(elmt.getName()))) {
    		             collect( temps, elmt, children.isEmpty() );
    		             for (Element child : children) {
    		            	 collect(temps,child,children.isEmpty());
    		             }
    		      }
    		      else{
    		             collect( autres, elmt, children.isEmpty() );
     
    		      if(!children.isEmpty()){
    			  parserFichier( children, temps, autres ); 
    		      }
    		      }
    		   }
    		}
    	public static void window(){
    		JScrollPane texteAsc;
    		JScrollPane texteAsc1;
    		JLabel label = new JLabel("Extraction de connaissances");
    		JFrame window=new JFrame("extraction connaissances"); 
    		JTextArea grandeZone = new JTextArea(7,10);
    		JTextArea grandeZone1 = new JTextArea(7, 10);
    		texteAsc = new JScrollPane(grandeZone);
    		texteAsc1 = new JScrollPane(grandeZone1);
    		JPanel container = new JPanel();
    		JPanel surfTotPanel = new JPanel();
    		JPanel surfTotPanel2 = new JPanel();
    		surfTotPanel.setLayout(new BoxLayout(surfTotPanel,BoxLayout.Y_AXIS));
    		Dimension dimension = new Dimension(200,400);
    		surfTotPanel.setPreferredSize(dimension);
    		surfTotPanel2.setLayout(new BoxLayout(surfTotPanel2,BoxLayout.Y_AXIS));
    		Dimension dimension2 = new Dimension(200,400);
    		surfTotPanel2.setPreferredSize(dimension2);
    		surfTotPanel.add(texteAsc1);
    		surfTotPanel2.add(texteAsc);
    		container.setLayout(new BorderLayout());
    		label.setHorizontalAlignment(JLabel.CENTER);
    		container.add(label, BorderLayout.NORTH);
    		container.add(surfTotPanel2, BorderLayout.EAST);
    		container.add(surfTotPanel,BorderLayout.WEST);
    		window.setContentPane(container);
    		window.setVisible(true);
    		window.setSize(500,400);
    		Font police = new Font("Andalus", Font.CENTER_BASELINE, 25);
    		label.setFont(police);
    		label.setForeground(Color.blue);
    		parserFichier (elmts, temps, autres);
    		StringBuilder texte = new StringBuilder("temps :"); 
    		for( String temp :  temps ) {
    		    texte.append( "\n" ); 
    		    texte.append( "- " ); 
    		    texte.append( temp ); 
    		}
     
    		grandeZone.setText(texte.toString()); 
     
    	}
    }
    l'erreur est au niveau de de l'appel de méthode et aussi au niveau de boucle for:

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Puisque tu as qu'une seule classe avec toutes les méthodes dedans, c'est donc encore plus simple : ce n'est que des méthodes qui s'appellent les unes les autres.

    Il y a toujours plusieurs façons de faire les choses : mais au final, elles se ressemblent à quelques détails d'ordre d'appel de méthodes. Puisque dans la méthode windows() tu as besoin des listes temps et autres pour pouvoir les afficher, il faut t'arranger pour les obtenir et les remplir avant de les afficher. C'est la méthode parseFichier() que tu remplis ces listes. On peut réaliser ça en appelant parseFichier dans windows, mais dans ton main() tu appelles déjà parseFichier(), ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    List<String> temps = new ArrayList<String>();
    List<String> autres = new ArrayList<String>();
    parserFichier(elmts,temps,autres);
    window();
    ...
    Dans ce code, tu as les deux listes : or, tu en a besoin dans le code de la méthode window(), pour pouvoir afficher ces listes dans les JTextArea. Il te suffit donc de passer en paramètres de window() ces 2 listes, ce qui te permettra de les utiliser dans window(). C'est exactement le même principe qui t'a permis de faire la récursivité sur parseFichier() : passer des parametres.

    Donc tu ajoutes 2 paramètres à window() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public static void window(List<String> temps, List<String> autres){
    ...
     
     
    }
    Maintenant dans cette méthode, on a accès à 2 variables qui pointent sur des listes. Et, donc, on modifie l'appel pour passer les bons paramètres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    List<String> temps = new ArrayList<String>();
    List<String> autres = new ArrayList<String>();
    parserFichier(elmts,temps,autres);
    window(temps, autres);
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  12. #12
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Merci bien,
    Donc je change les paramètres des méthodes comme suit :
    Pour la déclaration de window
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static void window(List<String> temps, List<String> autres)
    Pour l’appel de fichier parserFichier dans la méthode window() : je mets la valeur null pour le paramètre elmts parce que window prend seulement deux paramètres et la méthode parserFichier contenant trois paramètre et ça parait comme erreur. Donc je mets null pour le paramètre elmts pendant l’appel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    try {
    			parserFichier( null, temps, autres);
    		} catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		StringBuilder texte = new StringBuilder("temps :"); 
    		for( String temp :  temps ) {
    		    texte.append( "\n" ); // pour passer à la ligne suivante
    		    texte.append( "- " ); // un tiret stylisé
    		    texte.append( temp ); // le texte de la ligne
    		}
    		// et à la fin :
    		grandeZone.setText(texte.toString());
    Maintenant l’appel de deux fichiers dans main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    List<Element> elmts=rootNode.getChildren();
    			List<String> temps = new ArrayList<String>();
    		    List<String> autres = new ArrayList<String>();
    			parserFichier(elmts,temps,autres);
    			window(temps,autres);
    En enregistrant ce code c’est parait comme juste mais en compilation malheureusement ça marche pas, il génère les fautes suivantes.
    Exception in thread "main" java.lang.NullPointerException
    at Affichage.parserFichier(Affichage.java:66)
    { for (Element elmt : elmts) }
    at Affichage.window(Affichage.java:115)

    {parserFichier( null, temps, autres);}
    at Affichage.main(Affichage.java:45)
    {window(temps,autres);}
    comment je peux corrigé ses erreurs et le plus important pour quoi ils sont affichées

  13. #13
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ahlemrhayem Voir le message
    Pour l’appel de fichier parserFichier dans la méthode window() : je mets la valeur null pour le paramètre elmts parce que window prend seulement deux paramètres et la méthode parserFichier contenant trois paramètre et ça parait comme erreur. Donc je mets null pour le paramètre elmts pendant l’appel.
    Ça sert à quoi d'apperler parseFichier dans window() puisque c'est déjà appelé dans main() ? Et puis, quand il manque un paramètre, on ne résoud pas ça en mettant n'importe quoi, surtout null ! Ce qui provoque forcément une NullPointerException ! On se demande pourquoi il manque un paramètre, et lequel, et où on peut aller chercher la bonne valeur pour celuic-i : en l'occurence, l'élément nécessaire à passer en paramètre à parseFichier est créé dans la méthode main() puisque c'est là qu'on parse le fichier vers JDOM et qu'on appelle parseFichier() (déjà) à cet endroit (donc il n'est pas nécessaire de le réappeler dans window()).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  14. #14
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Merci beaucoup pour votre aide
    ça marche.

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

Discussions similaires

  1. Affichage d'un résultat dans une interface
    Par alainb dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 13/02/2011, 19h08
  2. problème d'affichage du résultat dans une classe qui utilise SNMP
    Par ramzouni dans le forum Débuter avec Java
    Réponses: 0
    Dernier message: 22/05/2009, 01h26
  3. Réponses: 9
    Dernier message: 04/12/2008, 15h22
  4. [A-03] Affichage multi résultats dans un text box
    Par julien_ott dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 10/10/2008, 18h45
  5. Affichage des résultats dans une fenêtre
    Par yoyo69 dans le forum MATLAB
    Réponses: 2
    Dernier message: 10/12/2007, 09h06

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