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

 Java Discussion :

Projet IHM en Java sous Netbeans : soucis de dépendances


Sujet :

Java

  1. #21
    Nouveau membre du Club
    Homme Profil pro
    Développeur en alternance
    Inscrit en
    Décembre 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur en alternance
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 112
    Points : 29
    Points
    29
    Par défaut
    On m'a dit de détruire les objets parce que dans le tableau d'objet tout les objets auront le même nom "ele" (peut-etre que ça ne pose pas de problème et ça m'arrangerait !!), j'ai besoin d'un tableau ou je peux décaler les cases (si l'utilisateur a fait 6 éléments et veut insérer un élément entre le 2 et le 3 il faut que l'objet prenne la place de l'objet 3, que l'objet 3 prenne la place de l'objet 4... Si il veut supprimer l'objet 2, l'objet 3 va prendre sa place etc...et il faut aussi que je puisse manipuler l'objet comme je veux (si l'utilisateur appuie sur précédent les champs doivent se ré afficher avec sa saisie précédente). J'ai fait un JFormattedTextField mais je ne vois pas comment faire pour afficher un message (avec JOptionPane.showMessageDialog()) si ce n'est pas des chiffres qui sont rentrés (si la personne rentre une lettre il faudrait qu'un message s'affiche directement). J'aimerais aussi avoir une variable "type" qui prendra comme valeur information,image ou video (si on choisit un fichier image type prendra la valeur image) : code du filtre et de la boite de dialogue
    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
                FileFilter fichierFilter = new FileNameExtensionFilter("Video,Images","flv", "avi", "mkv", "mp4", "mpeg", "mov","amv","asf","bik","bin","divx","drc","gxf","gvi","mpe",
                "mpeg","mpeg1","mpeg1","mp4v","mp2","mp2v", "bmp", "gif", "jpg", "jpeg", "png","html");
                JFileChooser dialogue = new JFileChooser();
                dialogue.setDialogTitle("Choisir une video, une image, un pdf...");
                dialogue.addChoosableFileFilter(fichierFilter);
                dialogue.setFileFilter(fichierFilter);
                dialogue.setCurrentDirectory(new File("C:/"));
                int retour=dialogue.showOpenDialog(null);
                if (retour == JFileChooser.APPROVE_OPTION) {
                    File selectedFile = dialogue.getSelectedFile();
                    texteFichier.setText(selectedFile.getPath());
                }
    String type;
    if(){
    type=video;
    }else if(){
    type=image;
    }else{
    type=information;
    }
    et j'ai commencer a écrire mon fichier xml grâce à http://cynober.developpez.com/tutoriel/java/xml/jdom/ et j'aimerais prendre ce qu'il y a dans le tableau pour pouvoir le faire mais je ne sais pas comment faire.
    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
    package fr.packagea;
     
    import java.util.ArrayList;
    import java.io.*;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import org.jdom2.*;
    import org.jdom2.output.*;
    import java.util.Date;
    /**
     *
     * @author
     */
    public class Scenario {
     
       ArrayList tabElement = new ArrayList();       
        void InsererElement(ElementInit ele)
        {
         tabElement.add(ele);
        } 
        void CreerXML() {
             //Récupération de la date du jour pour la mettre dans le XML
            Date actuelle = new Date();
            DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
            String dat = dateFormat.format(actuelle);
     
            Element scenario = new Element("scenario");
            org.jdom2.Document document = new Document(scenario);
             //On met la date du jour dans le XML avant la racine
            Element dateCreation =new Element("dateCreation");
            dateCreation.setText(dateFormat.format( dateCreation ));
            scenario.addContent(dateCreation);
     
            Element element =new Element("element");
            scenario.addContent(element);
     
            Element rang =new Element("rang");
            element.addContent(rang);
     
            Element type =new Element ("type");
            element.addContent(type);
     
            Element duree =new Element("duree");
            element.addContent(duree);
     
            Element nom =new Element("nom");
            element.addContent(nom);
     
            Element descriptif =new Element("escriptif");
            element.addContent(descriptif);
     
            Element chemin =new Element("chemin");
            element.addContent(chemin);
     
        }
    }
    ne risque t il pas d'y avoir des problèmes car les variables ont les mêmes noms ? et est-ce que la date va bien s'afficher ?

  2. #22
    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
    Je ne comprends pas grand chose à ce que tu racontes...
    Citation Envoyé par Java Ou Javapas Voir le message
    On m'a dit de détruire les objets parce que dans le tableau d'objet tout les objets auront le même nom "ele" (peut-etre que ça ne pose pas de problème et ça m'arrangerait !!),
    De quel nom parles-tu ? Si tu parles de noms de variables, tu peux tout de suite oublier tout ce que tu veux faire : ils ne sont pas accessibles en exécution. Si tu parles d'un attribut nom d'un objet, à quoi sert-il, s'ils ont tous le même nom ?
    Si tu as un attribut nom donc le but est de distinguer une instance d'une autre, et de facilement la reconnaitre, alors utiliser une Map (avec le nom en clef) te permettra non seulement d'y accèder très vite et simplement, mais également de ne pas à te préoccuper du fait que plusieurs instances auraient le même nom (en réalité plusieurs versions du même objet) : la map ne peut contenir qu'une fois la clef.
    Sinon, dans une liste, il faudra simplement enlever l'objet à remplacer de la liste, pas besoin de détruire quoique ce soit.


    Citation Envoyé par Java Ou Javapas Voir le message
    j'ai besoin d'un tableau ou je peux décaler les cases (si l'utilisateur a fait 6 éléments et veut insérer un élément entre le 2 et le 3 il faut que l'objet prenne la place de l'objet 3, que l'objet 3 prenne la place de l'objet 4... Si il veut supprimer l'objet 2, l'objet 3 va prendre sa place etc...et il faut aussi que je puisse manipuler l'objet comme je veux (si l'utilisateur appuie sur précédent les champs doivent se ré afficher avec sa saisie précédente).
    Utilise donc une java.util.List (une ArrayList par exemple, ou un LinkedList si tu as beaucoup de manipulation d'insertions et suppressions et que tu as des problèmes de performances avec l'ArrayList).
    Citation Envoyé par Java Ou Javapas Voir le message
    J'ai fait un JFormattedTextField mais je ne vois pas comment faire pour afficher un message (avec JOptionPane.showMessageDialog()) si ce n'est pas des chiffres qui sont rentrés (si la personne rentre une lettre il faudrait qu'un message s'affiche directement).
    Là, je ne suis pas sûr de comprendre... tu parles d'afficher un message d'erreur en cas de saisie incorrecte ?
    Citation Envoyé par Java Ou Javapas Voir le message
    J'aimerais aussi avoir une variable "type" qui prendra comme valeur information,image ou video (si on choisit un fichier image type prendra la valeur image) : code du filtre et de la boite de dialogue
    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
                FileFilter fichierFilter = new FileNameExtensionFilter("Video,Images","flv", "avi", "mkv", "mp4", "mpeg", "mov","amv","asf","bik","bin","divx","drc","gxf","gvi","mpe",
                "mpeg","mpeg1","mpeg1","mp4v","mp2","mp2v", "bmp", "gif", "jpg", "jpeg", "png","html");
                JFileChooser dialogue = new JFileChooser();
                dialogue.setDialogTitle("Choisir une video, une image, un pdf...");
                dialogue.addChoosableFileFilter(fichierFilter);
                dialogue.setFileFilter(fichierFilter);
                dialogue.setCurrentDirectory(new File("C:/"));
                int retour=dialogue.showOpenDialog(null);
                if (retour == JFileChooser.APPROVE_OPTION) {
                    File selectedFile = dialogue.getSelectedFile();
                    texteFichier.setText(selectedFile.getPath());
                }
    String type;
    if(){
    type=video;
    }else if(){
    type=image;
    }else{
    type=information;
    }
    Les enum sont toutes indiquées pour gérer ça. Et un switch sur l'extension, ou, mieux, une map prédéterminée associant extension et type.
    Tu peux déclarer une enum :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public enum MediaType {
           IMAGE, VIDEO, INFO;
    }
    Créer une map :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static final Map<String, MediaType> MEDIA_TYPES=createMediaTypeMap();
    private static createMediaTypeMap() {
       Map<String, MediaType> media= new HashMap<>();
       media.put("png", MediaType.IMAGE);
       media.put("jpg",MediaType.IMAGE);
       media.put("avi",MediaType.VIDEO);
       /*...*/
    return Collections.unmodifiableMap(media);
    }
    Et récupérer le type pour une extension
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MediaType type = MEDIA_TYPES.get(extension);
    Il peut être intéressant de paramétrer la map dans un fichier (properties, xml, json...), ce qui te simplifiera le paramétrage (si tu as besoin d'ajouter une nouvelle extension, il te suffit de modifier le fichier sans toucher au code). Tu poses le fichier dans le package à côté du .java. Ainsi, tu pourras le charger comme ressource (voir Class.getResource() ou Class.getResourceAsStream()). Tu peux rapidement convertir une String en enum avec la méthode valueOf de la classe d'enum.
    Tu peux utiliser le même fichier pour configurer ton FilenameFilter.


    Citation Envoyé par Java Ou Javapas Voir le message
    et j'ai commencer a écrire mon fichier xml grâce à http://cynober.developpez.com/tutoriel/java/xml/jdom/ et j'aimerais prendre ce qu'il y a dans le tableau pour pouvoir le faire mais je ne sais pas comment faire.
    Bah, le principe, c'est toujours le même (xml, jdom ou n'importe quoi d'autre) : la boucle. Après, le principe pour créer des éléments ou affecter des attributs est le même, boucle ou pas.

    Citation Envoyé par Java Ou Javapas Voir le message
    et est-ce que la date va bien s'afficher ?
    Les variables ? même noms ? Tu parles de quoi ?
    Citation Envoyé par Java Ou Javapas Voir le message
    et est-ce que la date va bien s'afficher ?
    S'afficher ? Tu parles pas plutôt du stockage de la date dans le XML ? Comme XML est avant tout un format texte, il va falloir convertir les dates en String, ce qu'on appelle format. Il est important que le format soit réversible si tu veux pouvoir recharger les données. Pour formater les java.util.Date, tu peux utiliser DateFormat ou SimpleDateFormat. Avec SimpleDateFormat, tu peux formater la date selon un motif (par exemple dd/MM/yyyy) et tu pourras la relire pour la retransformer en date avec la même classe et le même motif.
    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. #23
    Nouveau membre du Club
    Homme Profil pro
    Développeur en alternance
    Inscrit en
    Décembre 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur en alternance
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 112
    Points : 29
    Points
    29
    Par défaut
    De quel nom parles-tu ? Si tu parles de noms de variables, tu peux tout de suite oublier tout ce que tu veux faire : ils ne sont pas accessibles en exécution. Si tu parles d'un attribut nom d'un objet, à quoi sert-il, s'ils ont tous le même nom ?
    Je parle du nom 'ele' (l'objet) comme tu peux le voir là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ElementInit ele=new ElementInit();     // Création et instanciation d'un nouvel objet de classe Elément          
                    //L'objet prend toutes les valeurs des champs de l'IHM
                    ele.cheminFichier = texteFichier.getText();
                    ele.duree = Integer.parseInt(txtDuree.getText());
                    ele.descriptif = txtDescriptif.getText();
                    ele.nom = txtNom.getText();
                    //ele.type = type.getText();
                    ele.rang = nbElement;
    je pensais que ça allait causer des problèmes mais en fait non.
    Utilise donc une java.util.List (une ArrayList par exemple, ou un LinkedList si tu as beaucoup de manipulation d'insertions et suppressions et que tu as des problèmes de performances avec l'ArrayList).
    je pars donc sur l'idée d'une ArrayList

    Là, je ne suis pas sûr de comprendre... tu parles d'afficher un message d'erreur en cas de saisie incorrecte ?
    Oui c'est ça, j'aimerais afficher un message d'erreur si la personne essaie de rentrer une lettre au lieu d'un chiffre (j'ai créé un JFormatedTextField comme tu me l'as conseillé avec la possibilité de rentrer que des entiers mais je peux quand même saisir des lettres).

    Les enum sont toutes indiquées pour gérer ça. Et un switch sur l'extension, ou, mieux, une map prédéterminée associant extension et type.
    Je pense plutôt partir sur une enum car ça m'a l'air plus simple (je n'aurais pas à rajouter de nouvelles extensions).

    S'afficher ? Tu parles pas plutôt du stockage de la date dans le XML ?
    oui en effet, merci pour tes réponses.

  4. #24
    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 Java Ou Javapas Voir le message
    Oui c'est ça, j'aimerais afficher un message d'erreur si la personne essaie de rentrer une lettre au lieu d'un chiffre (j'ai créé un JFormatedTextField comme tu me l'as conseillé avec la possibilité de rentrer que des entiers mais je peux quand même saisir des lettres).
    Cela risque d'être assez gênant d'avoir un dialogue modale qui s'ouvre chaque fois que la saisie est erronée, mais c'est une solution. Il faut gérer ça sur l'action (ActionListener) (déclenché lorsqu'on valide par entrée), et sur la perte de focus (FocusListener). Mais du coup, rien n'empêche l'utilsiateur de laisser l'erreur et d'aller faire autre chose. Ou alors il faut forcer la reprise du focus. Le problème ensuite peut-être par rapport au élément qui font perdre naturellement le focus (l'affichage d'un menu, d'une popup, d'un dialogue modale, etc.).

    Les autres solutions peuvent être de travailler par écoute continue (DocumentListener), et/ou par InputVerifier prévu pour valider la saisie et qui bloquera la perte de focus (en revanche, en cas de fermeture de fenêtre, il se peut que la nouvelle valeur erronée soit simplement perdue (édition annulée) : il faudra éventuellement faire une passe de validation pour empêcher la fermeture du dialogue en cas de saisie incorrecte (en complément d'éventuel contrôle sur champ vide obligatoire). Il y a également la solution du DocumentFilter qui permet, entre autres, d'interdire carrément la saisie de caractères indésirables (ce qui permet d'éviter simplement de saisir des lettres dans un champ de saisie de nombre).


    Citation Envoyé par Java Ou Javapas Voir le message
    Je pense plutôt partir sur une enum car ça m'a l'air plus simple (je n'aurais pas à rajouter de nouvelles extensions).
    Je parlais de configurer la map d'association entre extension et enum par un fichier et non du code Java, ce qui est un peu moins fastidieux, du moins rébarbatif au moins.
    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.

  5. #25
    Nouveau membre du Club
    Homme Profil pro
    Développeur en alternance
    Inscrit en
    Décembre 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur en alternance
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 112
    Points : 29
    Points
    29
    Par défaut
    Il y a également la solution du DocumentFilter qui permet, entre autres, d'interdire carrément la saisie de caractères indésirables (ce qui permet d'éviter simplement de saisir des lettres dans un champ de saisie de nombre).
    C'est en effet ce que j'aimerais faire, mais d'après ce que j'ai vu sur internet je suis obliger de créer une nouvelle classe (une classe entière pour juste une zone de texte...) et le code à l'intérieur est assez compliquer.
    Je parlais de configurer la map d'association entre extension et enum par un fichier et non du code Java, ce qui est un peu moins fastidieux, du moins rébarbatif au moins.
    ah ok ! et y a pas moyen de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     if(fileFilter == png || bmp || jpg...){
    type = "image";
    }else if (fileFilter == mpeg1||nmpeg1 || mp4v || mp2){
    type= "video";
    }else{
    type = texte;
    }
    ?
    Le tuto pour faire le XML en java est très bien, mais par contre je ne comprends pas comment faire pour l'enregistrer parce que dans le code de CYNOBER
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        void EnregistrerXML(String fichier){
               try
               {
                //On utilise ici un affichage classique avec getPrettyFormat()
                XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
                //Remarquez qu'il suffit simplement de créer une instance de FileOutputStream
                //avec en argument le nom du fichier pour effectuer la sérialisation.
                sortie.output(document, new FileOutputStream(fichier));
                }
                catch (java.io.IOException e){}
                }
     
    }
    je ne vois pas a quoi correspond "document"

  6. #26
    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 Java Ou Javapas Voir le message
    C'est en effet ce que j'aimerais faire, mais d'après ce que j'ai vu sur internet je suis obliger de créer une nouvelle classe (une classe entière pour juste une zone de texte...) et le code à l'intérieur est assez compliquer.
    Certe, mais créer des classes en Java est assez commun. Globalement, ce n'est pas si complexe que ça.



    Citation Envoyé par Java Ou Javapas Voir le message
    ah ok ! et y a pas moyen de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     if(fileFilter == png || bmp || jpg...){
    type = "image";
    }else if (fileFilter == mpeg1||nmpeg1 || mp4v || mp2){
    type= "video";
    }else{
    type = texte;
    }
    ?
    Bah, déjà == pour tester l'égalité entre chaînes tu peux oublier, c'est equals() qu'il faut utiliser. Ensuite, on peut faire ce genre de code, mais c'est tellement rébarbatif, fastidieux à éditer et pénible à libre, donc sources d'erreurs, qu'un fichier à la yaml du type :
    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
    IMAGE
       jpg, jpeg
       png
       bmp
       tif, tiff
       psd
    VIDEO
       dvix
       mp4
       [avi]
       [mkg]
    INFO
       pdf
       txt
       html
    c'est vachement plus simple à maintenir.

    Citation Envoyé par Java Ou Javapas Voir le message
    Le tuto pour faire le XML en java est très bien, mais par contre je ne comprends pas comment faire pour l'enregistrer parce que dans le code de CYNOBER
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        void EnregistrerXML(String fichier){
               try
               {
                //On utilise ici un affichage classique avec getPrettyFormat()
                XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
                //Remarquez qu'il suffit simplement de créer une instance de FileOutputStream
                //avec en argument le nom du fichier pour effectuer la sérialisation.
                sortie.output(document, new FileOutputStream(fichier));
                }
                catch (java.io.IOException e){}
                }
     
    }
    je ne vois pas a quoi correspond "document"
    le Document c'est la représentation en mémoire du XML que tu veux enregistrer, un arbre d'objet en résumé. Tu peux en obtenir un en lisant un fichier XML (void III-A. 3.1. dans la doc de cynober), ou en créer un (voir chapitre II-B. 2.2 de la doc de cynober). Le principe c'est lire ou créer un document, le modifier, l'écrire.
    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.

  7. #27
    Nouveau membre du Club
    Homme Profil pro
    Développeur en alternance
    Inscrit en
    Décembre 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur en alternance
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 112
    Points : 29
    Points
    29
    Par défaut
    Certes, mais créer des classes en Java est assez commun. Globalement, ce n'est pas si complexe que ça.
    Ok est ce que cet exemple est bien : http://www.java2s.com/Tutorial/Java/...mentFilter.htm



    Bah, déjà == pour tester l'égalité entre chaînes tu peux oublier, c'est equals() qu'il faut utiliser. Ensuite, on peut faire ce genre de code, mais c'est tellement rébarbatif, fastidieux à éditer et pénible à lire
    pas faux mais comment utiliser le fichier yaml ? Il faut faire une map comme tu l'as dit plus haut ?

    le Document c'est la représentation en mémoire du XML que tu veux enregistrer, un arbre d'objet en résumé. Tu peux en obtenir un en lisant un fichier XML (void III-A. 3.1. dans la doc de cynober), ou en créer un (voir chapitre II-B. 2.2 de la doc de cynober). Le principe c'est lire ou créer un document, le modifier, l'écrire.
    Ou est enregistrer le XML ? Peut-on lui donner un chemin précis ?

  8. #28
    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 Java Ou Javapas Voir le message
    Ok est ce que cet exemple est bien : http://www.java2s.com/Tutorial/Java/...mentFilter.htm
    Bah, pas vraiment, à part pour enregistrer le DocumentFilter sur l'éditeur. Parce qu'il n'y a aucune implémentation (il ne fait pas ce qu'il est censé faire, il ne fait que tracer les appels dans la console).
    Le principe est simple :
    • tu as trois méthodes, avec des paramètres similaires : une qui gère l'insertion de texte, une qui gère le remplacement et une la suppresssion
    • le principe c'est de tester le paramètre qui représente les caractères qu'on veut ajouter (ou qui vont remplacer ce qu'il y a remplacer) dans le cas d'un insert ou d'un update, et de décider ce qu'on fait :
      • on peut ignorer : la saisie ne fait rien
      • on peut modifier ou supprimer les caractères indésirables (par exemple le lettres si on veut saisir que des chiffres)
      • on peut ajouter des caractères pour complèter
    • on peut tester les caractères ajoutés, mais aussi supprimé, ou n'importe quoi d'autre, comme par exemple compter les lignes pour empêcher de saisir plus de lignes qu'un max, ou n'importe quoi d'autre

    Des exemples ici :

    Pour en savoir plus


    Citation Envoyé par Java Ou Javapas Voir le message
    pas faux mais comment utiliser le fichier yaml ? Il faut faire une map comme tu l'as dit plus haut ?
    Avec le format donné en exemple, placé dans un fichier exemplemaptypext/MediaType.cfg
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    package exemplemaptypeext;
     
    public enum MediaType {
     
    	VIDEO,
    	IMAGE,
    	INFO;
     
    }
    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
    package exemplemaptypeext;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.UncheckedIOException;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Objects;
    import java.util.concurrent.atomic.AtomicReference;
    import java.util.stream.Collectors;
     
    public class MediaTypes {
     
    	private static final Map<String,MediaType> MEDIA_TYPES=load();
     
    	public static final MediaType of(String extension) {
    		if ( extension==null ) {
    			return null;
    		}
    		if ( extension.startsWith(".") ) {
    			extension=extension.substring(1);
    		}
    		return MEDIA_TYPES.get(extension);
    	}
     
    	public static final List<String> getExtensions(MediaType mediaType) {
    		return MEDIA_TYPES.entrySet()
    				          .stream()
    				          .filter(e-> Objects.equals(mediaType, e.getValue()))
    				          .map(Map.Entry::getKey)
    				          .sorted()
    				          .collect(Collectors.toList());
    	}
     
    	private static Map<String, MediaType> load() {
    		Map<String, MediaType> map = new HashMap<>();
    		try(BufferedReader reader = new BufferedReader(new InputStreamReader(MediaType.class.getResourceAsStream("MediaType.cfg")))) {
    			final AtomicReference<MediaType> mediaType=new AtomicReference<>();
    			reader.lines()
    			      .forEach(line-> {
    			    	  if ( line.startsWith(" ") ) {
    			    		  Arrays.stream(line.trim().split(","))
    			    		        .map(String::trim)
    			    		        .map(ext-> {
    			    		        	if ( ext.startsWith("[") && ext.endsWith("]") ) {
    			    		        		return ext.substring(1, ext.length()-1);
    			    		        	}
    			    		        	return ext;
    			    		        })
    			    		        .forEach(ext-> map.put(ext,mediaType.get()));
    			    	  }
    			    	  else {
    			    		  mediaType.set(MediaType.valueOf(line.trim()));
    			    	  }
    			      });
     
    		}
    		catch(IOException e) {
    			throw new UncheckedIOException(e);
    		}
    		return Collections.unmodifiableMap(map);
    	}
     
    }
    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
    package exemplemaptypeext;
     
    public class Exemple {
     
    	public static void main(String[] args) {
     
    		printType("machin.png");
    		printType("bidule.mp4");
     
    		System.out.println("Extensions de type image connues :");
    		MediaTypes.getExtensions(MediaType.IMAGE).forEach(System.out::println);
     
    		System.out.println("Extensions de type video connues :");
    		MediaTypes.getExtensions(MediaType.VIDEO).forEach(System.out::println);
     
    	} 
     
    	private static void printType(String name) {
    		System.out.println("Type de " + name + " " + MediaTypes.of(getExtension(name))); 
    	}
     
    	public static String getExtension(String path) {
    		int i=path.lastIndexOf('.');
    		if ( i<0 ) {
    			return null;
    		}
    		else {
    			return path.substring(i+1);
    		}
    	}
     
    }
    • Tu lis le fichier ligne à ligne,
    • si une ligne ne commence par une espace, tu sais que c'est un type
    • si une ligne commence par une espace, tu sais que c'est une liste d'extensions, un trim, un split, et tu as la liste, que tu accumules dans la liste du type




    Ou est enregistrer le XML ? Peut-on lui donner un chemin précis ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void EnregistrerXML(String fichier){
    c'est le paramètre fichier ici, dans l'exemple du tuto, qui est un chemin (avec le nom du fichier).
    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. #29
    Nouveau membre du Club
    Homme Profil pro
    Développeur en alternance
    Inscrit en
    Décembre 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur en alternance
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 112
    Points : 29
    Points
    29
    Par défaut
    Je suis bloqué sur la création d'une boucle pour mon XML et je ne sais pas si mon tableau fonctionne,
    mon code qui recupere touts les champs pour les mettre dans le tableau dans la classe Fenetre (c'est l'IHM)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ElementInit ele=new ElementInit();     // Création et instanciation d'un nouvel objet de classe Elément          
                    //L'objet prend toutes les valeurs des champs de l'IHM
                    ele.cheminFichier = texteFichier.getText();
                    ele.duree = Integer.parseInt(txtDuree.getText());
                    ele.descriptif = txtDescriptif.getText();
                    ele.nom = txtNom.getText();
                    //ele.type = type.getText();
                    ele.rang = nbElement;
     
                // Ajout de lélément à la classe scénario            
                scenar.InsererElement(ele);   //l'objet secnar à été instancier au début du code dans la classe directement
    voila mon tableau dans la classe scénario :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        void InsererElement(ElementInit elem) {
            ElementInit eleTempo =new ElementInit(); 
            eleTempo.rang=elem.rang;
            eleTempo.duree=elem.duree;
            //eleTempo.type=elem.type;
            eleTempo.nom=elem.nom;
            eleTempo.descriptif=elem.descriptif;
            eleTempo.cheminFichier = elem.cheminFichier;
            tabElement.add(elem.rang, eleTempo);
        }
    et voila ma méthode pour le XML; je ne sais pas si dois utiliser un iterator ou si dois faire une boucle et quoi mettre entre les parenthèses dans rang.setText():
    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
        void CreerXML(){
             //Récupération de la date du jour pour la mettre dans le XML
            Date actuelle = new Date();
            DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
            String dat = dateFormat.format(actuelle);
     
     
     
            //On met la date du jour dans le XML et on l'ajoute à la racine
            Element dateCreation =new Element("dateCreation");
            dateCreation.setText(dateFormat.format( dateCreation ));
            scenario.addContent(dateCreation);
     
     
            //Création d'une boucle pour mettre les element du tableau  
            for(int j=1;j<tabElement.size();j++){
     
     
     
            //On créer un Element que l'on nomme "element" et dans lequel on va mettre tout les champs dedans
            Element element =new Element("element");
            scenario.addContent(element);
     
            //On créer un Element pour le champ rang et on l'associe a element
            Element rang =new Element("rang");
            rang.setText((String)tabElement.get(j));
            element.addContent(rang);
     
            //On créer un Element pour le champ type et on l'associe a element
            Element type =new Element ("type");
            element.addContent(type);
     
            //On créer un Element pour le champ duree et on l'associe a element
            Element duree =new Element("duree");
            element.addContent(duree);
     
            //On créer un Element pour le champ nom et on l'associe a element
            Element nom =new Element("nom");
            element.addContent(nom);
     
            //On créer un Element pour le champ descriptif et on l'associe a element
            Element descriptif =new Element("escriptif");
            element.addContent(descriptif);
     
            //On créer un Element pour le champ chemin et on l'associe a element
            Element chemin =new Element("chemin");
            element.addContent(chemin);        
            }
    }

    Et puis dans le code que tu m'as donné pour le documentFilter, tout les "MediaType" sont soulignés en rouge.
    Enfin, j'ai un problème avec le jdom2.jar, à chaque fois il me dit qu'il ne le trouve pas et je dois aller le chercher manuellement.

  10. #30
    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 Java Ou Javapas Voir le message
    voila mon tableau dans la classe scénario :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        void InsererElement(ElementInit elem) {
            ElementInit eleTempo =new ElementInit(); 
            eleTempo.rang=elem.rang;
            eleTempo.duree=elem.duree;
            //eleTempo.type=elem.type;
            eleTempo.nom=elem.nom;
            eleTempo.descriptif=elem.descriptif;
            eleTempo.cheminFichier = elem.cheminFichier;
            tabElement.add(elem.rang, eleTempo);
        }
    Pourquoi faire une copie de elem ? Ça sert à quoi ? Et l'utilisation du rang sert à quoi ? Parce qu'en l'état ça ne peut conduire qu'à quelque chose d'indéterminé, si tabElement est bien une List comme je le pense (sinon la méthode add n'a pas un nom adéquat).
    La méthode List.add(index, objet) insère l'objet à la position index, en poussant ce qui se trouve déjà à index et suivant vers la fin de la liste, ou si index est égal la taille de la liste, le met à la fin. En conséquence,
    1. si index>list.size(), tu auras une exception
    2. sinon, si index<list.size(), tu ne retrouveras pas de manière sure les éléments à l'endroit elem.rang, puisque si tu ajoutes deux éléments au même rang, l'un de deux ne sera pas au rang prévu
    3. et si index est toujours égal à list.size(), autant ne pas se compliquer la vie en utilisant la méthode sans index, qui garantira que les éléments sont dans l'ordre dans lequel on les a ajouté


    Citation Envoyé par Java Ou Javapas Voir le message
    et voila ma méthode pour le XML; je ne sais pas si dois utiliser un iterator ou si dois faire une boucle et quoi mettre entre les parenthèses dans rang.setText(): [CODE] void CreerXML(){
    Je suppose que par boucle tu veux parler de for, ou forEach. Parce qu'un iterator, ça ne sert que très rarement autrement que dans une boucle. Ensuite, le choix entre le for, le forEach, ou la boucle sur iterator (for ou while), est basé sur 3 critères :
    1. l'optimisation
    2. la concision
    3. l'opportunité

    L'opportunité, c'est utiliser la boucle for avec index si tu as besoin d'un index. Par exemple, si tu dois avoir une information dans le xml qui dépend de l'index. Sinon, il est inutile. La boucle sur itérator est une vieille construction qu'on peut remplacer avantageusement au niveau de la concision par un forEach, excepté si tu n'as pas d'Iterable en entrée (et faire une classe utilitaire pour transformer un producteur d'iterator non itérable en itérable est simplissime). Quant à l'optimisation, elle ne doit pas être un sujet de préoccupation lors de la première écriture. Bien sûr, il ne s'agit pas d'écrire du code superfétatoire juste histoire de ralentir l'exécution, mais sinon le travail d'optimisation se fera plus tard si c'est nécessaire, et ce n'est probablement pas au niveau des types de boucle que tu pourras être efficace.

    Citation Envoyé par Java Ou Javapas Voir le message
    Et puis dans le code que tu m'as donné pour le documentFilter, tout les "MediaType" sont soulignés en rouge.
    Mmm, mais encore, c'est quoi l'erreur ? Enfin, tu as bien créer l'enum ? Elle est bien accessible (dans le même package ou importée) ?


    Citation Envoyé par Java Ou Javapas Voir le message
    Enfin, j'ai un problème avec le jdom2.jar, à chaque fois il me dit qu'il ne le trouve pas et je dois aller le chercher manuellement.
    Qu'il ne le trouve pas ? Quoi ? Le jar ? Qui ne le trouve pas ? Le chercher manuellement ? Qu'est-ce que ça veut dire ?
    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.

  11. #31
    Nouveau membre du Club
    Homme Profil pro
    Développeur en alternance
    Inscrit en
    Décembre 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur en alternance
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 112
    Points : 29
    Points
    29
    Par défaut
    Pourquoi faire une copie de elem ? Ça sert à quoi ? Et l'utilisation du rang sert à quoi ?
    Pour la copie de elem mon prof m'a dit (mais je pense que je vais arrêter de suivre ces conseils) qu'il fallait le faire sinon l'objet allait être supprimer (comme quoi elem représente un pointeur et que si on le met dans le tableau il ne pointera plus sur rien). En effet l'utilisation du rang ne sert pas et je l'ai enlevé.
    Pour la boucle, j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //for(int j=0;j<tabElement.size();j++){
    Element rang =new Element("rang");
            //rang.setText(rang.getChild("rang").getText());
            rang.setText((String)tabElement.get(j));  /*la j'accède à l'objet, je veux accéder juste a un attribut comme ça par exemple        rang.setText(tabElement.nom);*/
            element.addContent(rang);
    Mais j'aimerais accéder a un attribut (le rang, le nom...) de l'objet.
    Mmm, mais encore, c'est quoi l'erreur ? Enfin, tu as bien créer l'enum ? Elle est bien accessible (dans le même package ou importée) ?
    l'erreur c'est "cannot find symbol", il me propose de créée une classe, j'ai bien créé l'enum (je l'ai mis dans ma classe Fenetre), tout est dans le même package (peut-etre parce que la classe c'est MediaTypes avec un "s").
    Qu'il ne le trouve pas ? Quoi ? Le jar ? Qui ne le trouve pas ? Le chercher manuellement ? Qu'est-ce que ça veut dire ?
    C'est le jar qu'il ne trouve pas, je dois aller chercher le chemin dans un explorateur de fichier.

  12. #32
    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 Java Ou Javapas Voir le message
    Pour la copie de elem mon prof m'a dit (mais je pense que je vais arrêter de suivre ces conseils) qu'il fallait le faire sinon l'objet allait être supprimer (comme quoi elem représente un pointeur et que si on le met dans le tableau il ne pointera plus sur rien).
    C'est peut-être les explications du prof que tu interprètes mal ou le contexte qui n'est pas du tout le même. En tout cas, "comme quoi elem représente un pointeur et que si on le met dans le tableau il ne pointera plus sur rien", c'est très maladroitement dit.
    elem est une variable (ou un paramètre dans le cas particulier de ton code, mais c'est pareil dans le contexte). Lorsqu'une variable est de type objet (comme dans ton cas), elle contient la référence d'un objet (ou null). L'existence d'un objet est lié à la notion de variable que par sa référence : l'objet n'existe plus lorsque plus aucune variable ne contient la référence de cet objet. (Attention, il n'existe plus du point de vue développeur, mais ça ne veut pas dire qu'il n'est plus en mémoire, mais c'est un autre sujet que tu auras l'occasion d'aborder quand tu verras la notion de garbage collector).
    Le fait d'avoir une variable elem qui contient une référence sur un objet et de mettre cette référence dans un tableau n'a strictement aucun autre effet sur l'objet que si la variable n'existe plus, l'objet a toujours une référence dans le tableau, donc existe toujours.

    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
    public static class Exemple {
     
            public static void main(String[] args) {
     
                     Exemple[] tableau = new Exemple[10];
     
                     metDansTableau(0,tableau);
                     // la variable machin n'existe pas ici, mais l'instance d'objet Exemple qu'on a créé dans metDansTableau existe toujours, stockée dans tableau[0].
     
            }
     
            public static void metDansTableau(int index, Exemple[] tableau) {
                        Exemple machin = new Exemple();
                        tableau[index]=machin;
            }
     
    }
    Citation Envoyé par Java Ou Javapas Voir le message
    Pour la boucle, j'ai essayé : [CODE]//for(int j=0;j<tabElement.size();j++){
    Tu aurais pu faire aussi for(ElementInit elem : tabElement).

    Citation Envoyé par Java Ou Javapas Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rang.setText((String)tabElement.get(j));  /*la j'accède à l'objet, je veux accéder juste a un attribut comme ça par exemple        rang.setText(tabElement.nom);*/
    Bah, tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rang.setText(tabElement.get(j).nom);
    ou avec le forEach :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rang.setText(elem.nom);


    Citation Envoyé par Java Ou Javapas Voir le message
    l'erreur c'est "cannot find symbol", il me propose de créée une classe, j'ai bien créé l'enum (je l'ai mis dans ma classe Fenetre),
    Bah dans ce cas la classe, c'est pas MediaType, mais Fenetre.MediaType. Ne la créé pas dans la classe Fenetre, mais comme une classe autonome, dans un fichier à part.

    Citation Envoyé par Java Ou Javapas Voir le message
    C'est le jar qu'il ne trouve pas, je dois aller chercher le chemin dans un explorateur de fichier.
    Je ne comprends pas de quoi tu parles. Tu a téléchargé JDOM2, qui comprend un jar, que tu copies dans ton projet sous NetBean et ensuite tu le montes dans le classpath avec le menu Libraries / Add JAR/Folder.
    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.

  13. #33
    Nouveau membre du Club
    Homme Profil pro
    Développeur en alternance
    Inscrit en
    Décembre 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur en alternance
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 112
    Points : 29
    Points
    29
    Par défaut
    Tu aurais pu faire aussi for(ElementInit elem : tabElement).
    Il me dit que un objet ne peut pas être converti en ElementInit et si jamais je selectionne la correction qu'il me propose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     for(Object elem : tabElement){
    il ne trouve plus "nom" dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rang.setText(elem.nom);
    et si jamais je garde ma boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     for(int j=0;j<tabElement.size();j++){
    il ne trouve pas rang dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rang.setText(tabElement.get(j).rang);

  14. #34
    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
    Parce que tu as déclarée ta liste sans préciser le type :
    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List tabElement = new ArrayList();
    écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<ElementInit> tabElement = new ArrayList<>();
    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.

  15. #35
    Nouveau membre du Club
    Homme Profil pro
    Développeur en alternance
    Inscrit en
    Décembre 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur en alternance
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 112
    Points : 29
    Points
    29
    Par défaut
    Bonjour
    Tous les fichiers que l'utilisateur va sélectionner devront ensuite être copier dans un autre répertoire, le problème c'est qu'il n'y a que le premier fichier qui est copier et pas les suivants, j'ai tester de nombreuses solutions mais soit rien n'est copié soit un seul est copié
    Code ou un seul fichier est copié :
    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
    public boolean copier() { 
     
            for(ElementInit elem : tabElement){
                Path source = Paths.get(elem.cheminFichier);
                Path destination=Paths.get("D:/Projet/Test/copieDossier/"+elem.nom);
     
                try { 
                    Files.copy(source, destination);   //fait la copie 
                    //écrase le fichier destination s'il existe et copie les attributs de la source sur la destination.  
                    //Files.copy(source, destination, StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES); 
                    } catch (IOException e) { 
                        e.printStackTrace();   //affiche l'exception et l'état de la pile d'exécution au moment de son appel
                        return false; 
                    } 
                    return true; 
            }
            return true;
        }
    Et le fichier qui est copier est de type FICHIER et pas de type jpg par exemple alors qu'il est de type jpg

  16. #36
    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
    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
    public boolean copier() { 
        for(ElementInit elem : tabElement){
            Path source = Paths.get(elem.cheminFichier);
            Path destination=Paths.get("D:/Projet/Test/copieDossier/"+elem.nom);
     
            try { 
                Files.copy(source, destination);   //fait la copie 
                //écrase le fichier destination s'il existe et copie les attributs de la source sur la destination.  
                //Files.copy(source, destination, StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES); 
            } catch (IOException e) { 
                e.printStackTrace();   //affiche l'exception et l'état de la pile d'exécution au moment de son appel
                return false; 
            } 
            return true; 
        }
        return true;
    }
    Ce que j'ai surligné est dans le for, sans condition, donc est exécuté pour chaque elem, donc dès le premier, on sort de la méthode...
    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.

  17. #37
    Nouveau membre du Club
    Homme Profil pro
    Développeur en alternance
    Inscrit en
    Décembre 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur en alternance
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 112
    Points : 29
    Points
    29
    Par défaut
    Merci pour ta réponse.
    Par contre le fichier copié est de type "fichier" et pas de type "jpg" par exemple, ce qui m'oblige de choisir le programme avec lequel l'ouvrir, y-a-t-il un moyen de garder le type ?
    J'utilise ce code pour obtenir la durée de la vidéo que l'utilisateur séléctionne :
    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
        public String obtenirDureeVideo( java.io.File videoFile, it.sauronsoftware.jave.Encoder encoder) {
     
        String result = "-1";
        MultimediaInfo info = null;
        try {
            info = encoder.getInfo( videoFile );
     
        } catch( InputFormatException e ) {
            // TODO: log
            e.printStackTrace();
     
        } catch( EncoderException e ) {
            // TODO: log
            e.printStackTrace();
        }
     
        if( info != null ) {
            long r = info.getDuration();
            result = String.format( "%d' %02d''",
                    TimeUnit.MILLISECONDS.toMinutes( r ),
                    TimeUnit.MILLISECONDS.toSeconds( r ) -
                    TimeUnit.MINUTES.toSeconds( TimeUnit.MILLISECONDS.toMinutes( r ))
            );
        }
     
        return result;
    }
    mais lorsque j'appelle la méthode dans ma classe principale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scenar.obtenirDureeVideo(selectedFile,encoder);
    je ne sais pas quoi mettre a la place de encoder, je n'ai aucun encodeur de déclarer dans ma classe principale. J'ai essayer de declarer un nouvel "it.sauronsoftware.jave.Encoder encoder" dans la classe principale mais ça ne fonctionne pas.

  18. #38
    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 Java Ou Javapas Voir le message
    Par contre le fichier copié est de type "fichier" et pas de type "jpg" par exemple,
    C'est quoi que tu appelles le type ? L'extension ? Si tu perds l'extension, c'est parce que le nom du fichier de destination ne se termine pas l'extension : c'est à toi de t'arranger pour le nom du fichier se termine par l'extension adéquate.

    Citation Envoyé par Java Ou Javapas Voir le message
    je ne sais pas quoi mettre a la place de encoder, je n'ai aucun encodeur de déclarer dans ma classe principale. J'ai essayer de declarer un nouvel "it.sauronsoftware.jave.Encoder encoder" dans la
    Bah, là, il va falloir consulter la doc de sauronsoftware... je sais pas, essaye new it.sauronsoftware.jave.Encoder() 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.

  19. #39
    Nouveau membre du Club
    Homme Profil pro
    Développeur en alternance
    Inscrit en
    Décembre 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur en alternance
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 112
    Points : 29
    Points
    29
    Par défaut
    Je reviens sur la façon d'obtenir le type. Comme je ne comprend pas le code, je ne peux pas l'utiliser car je dois être capable de l'expliquer le jour de mon oral, j'ai donc décider de faire avec un if
    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
                   FileChooser fileChooser = new FileChooser();
                    fileChooser.setTitle("Choississez un fichier");
                    fileChooser.getExtensionFilters().addAll(new ExtensionFilter("Video,Images","*.flv", "*.avi", "*.mkv", "*.mp4", "*.mpeg", "*.mov","*.amv","*.asf","*.bik","*.bin","*.divx","*.drc","*.gxf","*.gvi","*.mpe",
                            "*.mpeg","*.mpeg1","*.mpeg1","*.mp4v","*.mp2","*.mp2v", "*.bmp", "*.gif", "*.jpg", "*.jpeg", "*.png","*.html","*.pdf"));
                    File selectedFile = fileChooser.showOpenDialog(null);
                    if (selectedFile != null) {
                        txtFichier.setText(selectedFile.getPath());
                        if(fileChooser.getExtensionFilters().equals("*.bmp")||fileChooser.getExtensionFilters().equals("*.jpeg")||fileChooser.getExtensionFilters().equals("*.gif")||fileChooser.getExtensionFilters().equals("*.jpg")||fileChooser.getExtensionFilters().equals("*.png")){
                            mediaType="image";                   
                        }else if(fileChooser.getExtensionFilters().equals("*.html")||fileChooser.getExtensionFilters().equals("*.pdf")){
                            mediaType="texte";
                        }else{
                            mediaType="video"; 
                            Encoder encode = new Encoder();
                            String dureeVideo =scenar.obtenirDureeVideo(selectedFile,encode);                       
                            txtDuree.setText(dureeVideo);
                        }
                    }
                }
    mais a chaque fois le type est video meme lorsque je choisis une image ou un fichier html
    Il n'y a aucun autre moyen pour obtenir le type ?

  20. #40
    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
    Tu dois simplement parser le nom du fichier pour en obtenir l'extension (et non le type). Cela n'a aucun sens d'utiliser l'ExtensionFilter qui ne sert qu'à paramétrer le dialogue de sélection de fichiers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static String getExtension(File file) {
        String filename = file.getName();
        int dotpos = filename.lastIndexOf('.');
        if ( dotpos>=0 ) {
            return filename.substring(dotpos+1);
        }
        else {
            return null;
        }
    }
    Ou alors tu utilises le mimetype (ça t'évitera éventuellement d'avoir à tester tous les cas d'extension, genre pour un fichier jpeg, l'extension jpg ou jpeg (et toutes les variabtions de casse):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static String getFileType(File file) {
    	return MimetypesFileTypeMap.getDefaultFileTypeMap().getContentType(file.getName());
    }
    Pour un fichier jpeg, tu obtiendras : image/jpeg
    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.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. Problème d'ouverture d'un projet Java sous NetBeans
    Par dearraed dans le forum NetBeans
    Réponses: 4
    Dernier message: 23/09/2012, 13h08
  2. récupérer le nom d'un projet java sous netbeans
    Par MalcolmIT dans le forum NetBeans
    Réponses: 0
    Dernier message: 06/08/2010, 15h53
  3. Réponses: 2
    Dernier message: 14/01/2009, 10h48
  4. mysql + java sous netbeans 6.1
    Par hbar01 dans le forum JDBC
    Réponses: 1
    Dernier message: 04/11/2008, 21h35
  5. Ouvrir fichier en Java (sous NetBeans ou Eclipse)
    Par birdy85 dans le forum NetBeans
    Réponses: 5
    Dernier message: 10/04/2008, 22h13

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