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

AWT/Swing Java Discussion :

Chercher à coder proprement


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 68
    Par défaut Chercher à coder proprement
    salut tout le monde,

    j'ai une interface graphique qui contient deux JTextField et un JcomboBox,et en fonction du contenu du JcomboBox, j'afficherai un autre JPanel qui contient un ensemble de composants.

    alors j'ai procédé comme suit(ça a marché) mais je veux bien savoir si j'ai codé proprement.

    j'ai créé un classe qui remplie une HashMap(String, JPanel)....le string est le contenu de ma JComboBox

    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
    public class MapGui {
     
    	/**
             * Create the panel.
             */
    	HashMap<String, JPanel> map;
     
    	public MapGui() {
    		map.put("1", new location());
    		map.put("2", new vente());
    		.......
    	}
     
    	public JPanel getPanel(String s) {
    		return map.get(s);
     
    	}
     
    }
    et à chaque fois je fais appel à la méthode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public JPanel getPanel(String s) {
    return map.get(s);
     
    }
    et new location() et new vente() et.....sont des classes qui héritent de JPanel et qui contiennent l'ensemble de composants.

    Merci d'avance

  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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Salut,

    Plutôt que d'utiliser une HashMap de JPanel et supprimer/remplacer le JPanel présent pour un autre (donc modifier régulièrement l'arbre de composant), tu peux utiliser un CardLayout. Il s'agit d'u n LayoutManager qui permet de choisir parmi un certain nombre de composants (des JPanel par exemple), l'unique composant qui sera affiché. On repère chaque composant par une clef, à la façon d'une Map, donc c'est très similaire, mais beaucoup moins impactant sur l'arbre de composant, et plus simple du point de vue gestion de l'interface (Layouting/Repainting).
    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
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 68
    Par défaut
    je l'ai utilisé et ça a fonctionné parfaitement, il utilise presque le même principe qu'une HashMap.

    la méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    show (Container parent, String name)
    permet d'afficher le composant ou le sous-container associé à la chaîne de caractères name.


    MAIS est il possible de récupérer le container associé à une chaine "name"?

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 68
    Par défaut
    parce que en fait, j'ai une interface graphique java qui contient deux textField et un JComboBox et un bouton, lorsque je clique sur le bouton, j'affiche un JPanel(qui contient un ensemble de JtextField) en fonction du contenu de ComboBox, pour cela j'ai utilisé le layout CardLayout et voici le code de mon bouton:

    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 void actionPerformed(ActionEvent arg0) {
    				String 
    				nom=textField.getText(),
    				prenom=textField_1.getText(),
    				acte=((String)comboBox.getSelectedItem()).trim();
    				String catégorie=ConnectionManager.getCategorie(((String)comboBox.getSelectedItem()).trim());
    				CardLayout cl = (CardLayout)(panel_1.getLayout());
    				location = new Location(nom,prenom,acte);
    				vente = new Vente(nom,prenom,acte);
    				......
    				obj20=new Objet20(nom,prenom,acte);
    				panel_1.add(location, "1");
    				panel_1.add(vente, "2");
    				.........
    				panel_1.add(obj20, "20");
    		        cl.show(panel_1, catégorie);
    			}
    ça marche parfaitement mais ce qui me dérange est que à chaque clique sur le bouton je recréé mes 20 objets et je les ajoutes a panel_1

    Y a t'il un moyen pour pallier à ce problème?

    Merci d'avace

  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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par mouned Voir le message
    MAIS est il possible de récupérer le container associé à une chaine "name"?
    Non. Il te faut avoir une HashMap, à part, pour ça. Mais tu ne devrais pas avoir à le faire : normalement, tu devrais préparer ton modèle et ton contrôleur au début, au moment de créer l'interfacs. Lors de la connexion entre les éléments du MVC, tu as besoin des références, mais ensuite tu ne devrais plus en avoir besoin : le contrôleur doit tout avoir à portée. Même si, éventuellement, la création des panels du cardlayout est dynamique (la connexion va se faire en partie au moment de la sélection), par contre, il pourra être nécessaire d'avoir un flag pour savoir que le panel n'a pas encore été créé.


    Citation Envoyé par mouned Voir le message
    parce que en fait, j'ai une interface graphique java qui contient deux textField et un JComboBox et un bouton, lorsque je clique sur le bouton, j'affiche un JPanel(qui contient un ensemble de JtextField) en fonction du contenu de ComboBox, pour cela j'ai utilisé le layout CardLayout et voici le code de mon bouton:

    [CODE]
    ça marche parfaitement mais ce qui me dérange est que à chaque clique sur le bouton je recréé mes 20 objets et je les ajoutes a panel_1

    Y a t'il un moyen pour pallier à ce problème?

    Merci d'avance
    Oui, il ne faut pas les créer à chaque fois. Tu les crées tous d'avance, et tu utilises ton modèle pour les remplir (et non pas le constructeur, qui ne doit avoir aucun argument). Ou, si tu veux faire plus simple : tu stockes chacun des panels que tu mets dans le cardlayout dans une variable de classe (ce que tu fais d'ailleurs semble-t-il. Tu n'es même pas obligé de les créer d'avance, mais c'est peut-être plus simple pour toi). Tu les remplis par contre par un setter et non par le constructeur (d'ailleurs c'est par un setter équivalent que le modèle les mettraist à jour).
    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 confirmé
    Inscrit en
    Novembre 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 68
    Par défaut
    si j'utilise les setters et les getters, ça au revient au même et peut etre pire parce que, dans le code de mon bouton, je vais appeler 3 setters pour chaque objets...3*20=60 lignes de codes.

    En plus, j'ai pas compris cette notion de modéle...est ce que vous pouvez m'eclaircir avec un exemple svp.

Discussions similaires

  1. Critique de l'ouvrage "Coder proprement" de Robert C. Martin
    Par sjrd dans le forum Langages de programmation
    Réponses: 15
    Dernier message: 27/11/2012, 11h31
  2. Coder proprement un fichier de config
    Par dedis dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 30/04/2010, 15h11
  3. Coder proprement en général
    Par eldran64 dans le forum Langages de programmation
    Réponses: 88
    Dernier message: 28/06/2009, 09h27
  4. Coder proprement et standarment
    Par ploop dans le forum Général Python
    Réponses: 2
    Dernier message: 26/04/2007, 08h57

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