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 :

Un problème d'organisation


Sujet :

Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Un problème d'organisation
    Bonjour,
    Tout d'abord je poste ici car je rencontre ce problème lors de la création d'une interface graphique d'un programme java "console", libre aux modérateurs du forum de le déplacer si nécessaire.

    Donc voici mon problème :
    On m'a posé un exercice en TP d'info dans lequel il fallait créer un système simple de gestion de fiches de lectures, ça consiste simplement en une classe fiche, instanciable qui a pour attributs différentes instances de classes de son package. Seulement, j'ai voulu pousser l'exercice un peu plus loin et créer une interface graphique simple.

    Donc J'ai un package A dans lequel sont la classe fiche et les classes nécessaires à son fonctionnement.

    J'ai un deuxième package B où sont toutes mes classes d'interfaces graphiques (4 classes héritées de JFrame, une pour afficher la liste des Fiches, une autre pour afficher le contenu de la fiche et les deux restantes pour créer une fiche et lui ajouter des questions).

    Et ma classe Main dans le package par défaut.

    Mon problème est que je ne vois comment faire pour faire interagir tous ces composants, non pas au niveau des listeners à implémenter qui fonctionnent très bien, mais au niveau de la structure même du programme, je m'explique : j'ai créé un Vector de fiches dans mon main pour stocker les fiches créées (pour l'instant la sauvegarde ne m'intéresse pas). Maintenant quand j'appelle ma fenêtre où s'affiche la liste, dois-je passer ce Vector en paramètre du constructeur ? Puis quand je veux créer une fiche à partir de ma fenêtre de création de fiches comment m'y prendre pour rajouter la nouvelle instance de fiche créée, dans ce Vector ?

    Voilà, donc ce n'est pas tant un problème de code mais plus d'organisation de mon application je pense. J'ai regardé du côté des diagrammes dynamiques en UML, des design-patterns en java, sans vraiment savoir ce que je cherchais.

    Savez-vous comment s'y prendre pour "construire" une application qui tienne la route ? Est-ce comme ça que l'on doit organiser une application ? Y a-t-il une manière "standard" de faire ?

    Merci de m'avoir lu,

    Colin.

    Nom : Capture.JPG
Affichages : 140
Taille : 59,3 Ko

    ps: je vous joins une image des 4 fenêtres ouvertes, si besoin est. De gauche à droite : fenêtre principale (la JList est vide sur la capture), fenêtre pour afficher la fiche, fenêtre pour ajouter une fiche et fenêtre pour ajouter une question.

  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,

    Tu as 2 possibilités :

    1. Soit ta fenêtre de création d'une fiche se ferme lorsqu'on clique sur "Ajouter la fiche"
    2. Soit cette fenêtre reste ouverte, les champs de remette à zéro, et on peut ajouter autant de fiche qu'on veut tant qu'on appuie sur "Ajouter la fiche"


    Dans le second cas, la fenêtre formulaire doit connaitre le vector de fiches (donc on le passera par exemple de la même façon que tu as fait pour la fenêtre qui affiche la liste : par le constructeur) pour pouvoir ajouter chaque nouvelle fiche dedans. Mais il faut également un moyen d'avertir la fenêtre principale pour la liste affichée se rafraichir, par évenement par exemple.

    Dans le premier cas, le plus classique, on peut avoir 2 cas :
    • Le plus classique est que la fenêtre formulaire est dite modale : elle bloque l'autre fenêtre (celle qui affiche la liste), et en plus elle bloque l'action qui l'a ouverte, ce qui permet de faire un code comme ça :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      actionPerformed(...) {
       
           formulaire = new ...
           formulaire.setVisible(true); // le code s'arrête ici tant que le formulaire n'est pas fermé
       
           Fiche fiche = formulaire.getFiche(); // on récupère la fiche créée par une méthode qu'on a fait pour ça (et qui retourne par exemple null si on a annulé)
           if ( fiche!=null ) {
                listeFiches.add( fiche ); // on ajoute la nouvelle fiche à la liste de fiches
                //rafraichir l'affichage de la liste
           }
       
      }
      La classe JDialog permet de gérer plus facilement ce genre de cas qu'avec une JFrame
    • La fenêtre formulaire est gérée par une fenêtre non modale (une JFrame classique). Dans ce cas, le code qui créé la JFrame (l'actionPerformed) n'attend pas que la Jframe formulaire soit fermée, donc on ne peut pas procéder comme avec une fenêtre modale. On pourrait procéder comme pour le cas 2 décrit au début de ce post, en passant la liste en argument du constructeur, mais le plus simple est de procéder par évenement : on peut écouter quand la frame se ferme (par un WindowListener ou un WindowAdapter), en faisant setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE).
      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
      actionPerformed(...) {
       
           formulaire = new ...
       
           formulaire.addWindowListener(new WindowAdapter()) {
       
                 public void windowClosing(WindowEvent e) {
                      // cette méthode permet d'empêcher la fermeture de la JFrame par mégarde, par exemple en affichant un JOptionPane pour confirmer la fermeture (en cas de confirmation 
                      dispose();
                 }
       
                 public void windowClose(WindowEvent e) {
                      Fiche fiche = formulaire.getFiche(); // on récupère la fiche créée par une méthode qu'on a fait pour ça (et qui retourne par exemple null si on a annulé)
                      if ( fiche!=null ) {
                           listeFiches.add( fiche ); // on ajoute la nouvelle fiche à la liste de fiches
                           //rafraichir l'affichage de la liste
                      }
                 }
       
           };
       
           formulaire.setVisible(true); // le code s'arrête ici tant que le formulaire n'est pas fermé
       
      }
      Le bouton "AJouter fiche" devra faire :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      fiche = new Fiche( ... ); // affecte une variable de classe (celle retournée par la méthode getFiche()) avec la fiche créée
      dispatchEvent(new WindowEvent(
                      this, WindowEvent.WINDOW_CLOSING));


    Une autre solution est de tgérer une notion de modèle : une classe qui contient le vecteur de fiche, et qui gère des évenements, et les méthodes d'ajout et suppression : ainsi tous les fenêtre auront un pointeur sur l'instance de cette classe, manipuleront la liste de fiches, et écouteron les évenements envoyés par elle pour savoir quand se rafraichir. Mais c'est plus compexe à faire.
    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
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci pour ta réponse, je teste ça ce week-end et je reviens aux nouvelles !

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonsoir, j'ai certes un peu (beaucoup) dépassé le délai que j'avais donné mais me revoilà !

    Suite à ta réponse, le modèle structuré que tu présentais comme troisième solution en fin de post m'a intrigué et après quelques recherches je suis tombé sur ce tuto.
    Après une semaine de lecture, ma petite appli est enfin fonctionnelle et (j'espère) bien structurée !

    Bref je passais juste par là pour signaler le problème résolu, mettre le lien pour d'éventuelles personnes en quêtes de réponses et te remercier pour ton aiguillage !

    Bonne continuation !

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

Discussions similaires

  1. problème d'organisation d'affichage
    Par FrancoisR29 dans le forum Requêtes
    Réponses: 4
    Dernier message: 17/09/2008, 08h48
  2. problème d'organisation:formulaire et tableau dans le même frame
    Par info_plus dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 06/07/2007, 10h13
  3. Problème d'organisation des données dans un jeu de stratégie
    Par khayyam90 dans le forum Développement 2D, 3D et Jeux
    Réponses: 8
    Dernier message: 15/06/2007, 17h13
  4. [GTKAda] Problème d'organisation dans une fenêtre
    Par Poseidon62 dans le forum Ada
    Réponses: 1
    Dernier message: 12/03/2007, 14h03
  5. [Packages] Problème d'organisation
    Par lolo... dans le forum JBuilder
    Réponses: 5
    Dernier message: 22/04/2003, 13h05

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