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 :

[Stratégie] Afficher une applet à la place d'une autre


Sujet :

AWT/Swing Java

  1. #1
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut [Stratégie] Afficher une applet à la place d'une autre
    Bonjour,
    je cherche a develloper une appli de gestion de fiche de test, mais je suis bloqué au niveau du graphisme : en effet ma Jframe principale est composées de 3 JPanels : le premier est dédié aux boutons principaux et est lui meme decomposés en 2 JPanels, le second est l'affichage d'un JTree qui me donne la listes de tous mes tests et la dernière est une applet de description du Test. Ces panels sont organisés grace à un gridbaglayout.

    maintenant, ce que je voudrais c'est d'une part remplacer le troisième Panel par un 4° lorsque j'appuie sur l'un de mes boutons, et d'autre part changer le contenu de ce panel lorsque je change me deplace dans le Jtree (mais je pense que cela ne posera pas trop de probleme une fois que j'aurais reussi a faire la première partie). pour cela j'ai fait ma fonction paint et j'appelle le repaint lorsque le boutton est cliqué. l'entrée dans la fonction se fait bien et j'arrive bien dans le cas desiré (cf le code ci dessous : au depart je suis dans le cas 0 et au click je passe dans le cas 3)
    ce code , qui fait partie de la fonction paint, concerne uniquement l'affichage du 3° panel
    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
     
    switch(action){
    	case 0 :
    	   System.out.println("je paint et td = "+td+" et cf = "+cf);
                       d = new Dimension(3*df.width/4,df.height - 2*bp.getMaximumSize().height);
                       td.setMaximumSize(d);
    	   td.setMinimumSize(d);
    	   td.setPreferredSize(d);
    	   td.setBorder(BorderFactory.createEtchedBorder());
    	   BuildConstraints(gbc,1,1,3,2,0,0);
    	   gbc.fill = GridBagConstraints.BOTH;
    	   gbc.insets = new Insets(0, 1, 0, 0);
    	   gbl.setConstraints(td,gbc);
    	   c.add(td);
    	   break;
    	case 1 : 
    	   break;
    	case 2 : 
    	    break;
    	case 3 :
    	   System.out.println("je repaint et td = "+td+" et cf = "+cf);
                       d = new Dimension(3*df.width/4,df.height - 2*bp.getMaximumSize().height);
    	   cf.setMaximumSize(d);
    	   cf.setMinimumSize(d);
    	   cf.setPreferredSize(d);
    	   cf.setBorder(BorderFactory.createEtchedBorder());
    	   BuildConstraints(gbc,1,1,3,2,0,0);
    	   gbc.fill = GridBagConstraints.BOTH;
    	   gbc.insets = new Insets(0, 1, 0, 0);
    	   gbl.setConstraints(cf,gbc);
    	   c.add(cf);
    	   break;
    	 case 4 :
    	   break;
    	 case 5 : 
    	   break;
            }
    cependant, depuis que je passe par cette fonction paint, l'affichage du Jtree ne se fait plus (en fait il est affiché et aussitot remplacé par un JScrollPane vide). de plus, les boutons situés dans le panel du haut sont décalés et se chevauchent une fois que j'ai appuyés sur le bouton. enfin le panel que je veux afficher à la place du 3° n'apparait pas (mais quand je passe en mode plein écran, j'en vois quelques morceau situé sous la 3°)

    ma question est donc la suivante : comment effacer le 3° panel et le remplacer par un autre sans casser le reste de l'affichage?

    merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    Est ce que tu as essayé en supprimant le JPanel de départ et en ajoutant le nouveau avec la même contrainte de placement dans le gridbaglayout ?
    Mess with the best, die like the rest!

  3. #3
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    ben j'ai fait ca dans mon actionPerformed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if(o==bp.newForm){//si l'on a cliquez sur le bouton newForm
                System.out.println("bouton newForm a faire");
                action = 3;
                td=null;
                cf=new CreateForm();
                this.repaint();
            }
    où newform est le bouton sur lequel j'appuie,bp le panel des boutons, td le 3° panel(celui que je veux effacer)et cf celui que je veux mettre a la place.
    et justement je me demandait si le fait de mettre td a null suffisait pour le supprimer (apparemment non...).comment puis-je le supprimer?
    pour info j'ai essayé les affichage de chaque panel avant de passer au paint et ils s'affichent bien.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    Pour le supprimer il faut que tu appelles la fonction remove(td) sur le container des panels. (cf. JavaDoc).
    Et ensuite tu fais add(cf,c) où c est la GridBagConstraints.
    Il me semble difficile de s'en sortir avec la méthode paint.
    Mess with the best, die like the rest!

  5. #5
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par barbu0055
    Pour le supprimer il faut que tu appelles la fonction remove(td) sur le container des panels. (cf. JavaDoc).
    Et ensuite tu fais add(cf,c) où c est la GridBagConstraints.
    Il me semble difficile de s'en sortir avec la méthode paint.
    la fonction remove m'enleve bien les panels que je veux merci (je le fait pour les trois car je place les 3 panels dans le paint)
    par contre quand je fait le add (j'ai essayé add(cf,c) comme tu me l'a conseillé et aussi add(cf) avec un setconstraints avant) il n'y a plus rien qu'y s'affiche

    enfin, j'ai eesayé de passer autrement que par le paint, ie en creant une fonction d'initialisation du panel, puis une fonction de modification que j'appelle au moment voulu, cependant le resultat reste le meme, ce qui me parait normal etant donné que le traitement est exactement le meme que pour le paint , ie la creation de mon gridbaglayout. pourquoi pense tu que le repaint ne serait pas judicieux? (dsl le graphisme n'est pas mon fort )

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    La méthode paint peut etre appelée tres souvent, il vaut donc mieux éviter de trop la surcharger.
    De plus elle sert à dessiner des éléments supplémentaires sur un composants. Et je ne vois pas trop quel est le composant dont tu surcharges la méthode paint. Le code que tu a mis dedans ressemble plus à du code d'initialisation qu'à du code de dessin, je pense donc qu'il peut être déplacé (dans le actionPerformed par exemple ou dans une autre méthode que le actionPerformed appellerait).
    Dans ce genre de cas tu ne devrais pas avoir besoin de toucher à la méthode paint.

    Et quand tu remplaces un panel par un autre, il faudrait faire un validate() sur le container apres la substitution.
    Mess with the best, die like the rest!

  7. #7
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    ok j'ai crée une autre fonction d'affichage avec le contenu de mon paint et j'ai ajouté un validate() ca marche nickel merci.

    par contre, j'aurais deux autres questions :
    1/(c pour verifier que j'ai bien compris)je voudrais que le contenu de mes panels (en fait le contenu de mes textfield et textarea) change selon l'enregistrement sur lequel je suis placé, pour cela il faut que j'utilise le paint(), non?
    2/est-il possible de modifier l'icone d'un noeud d'un JTree sans pour autant modifier le type du noeud? car en fait j'ai reussi a modifier cette icone en choisissant des noeuds de type JCheckBox pour mon Jtree, mais cela me posais des probleme d'affichages (comme par exemple le refus d'inserer une scrollbar verticale lorsque le nom du fichier etait trop grand, ce qui fait que je ne voyais plus les noms les plus petits) que je n'ai plus depuis que j'utilise les noeuds par defaut (DefaultMutableTreeNode). par contre je n'ai pas trouvé de facon de changer l'icone par defaut, ni dans la javadoc, ni via google.

    en tt cas merci encore pour tes reponses tu m'as deja enlevé une grosse épine du pied

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    1/ Le paint doit servir en dernier recour. Si tu veux changer le contenu le contenu d'un textfield ou jtextarea il y a la methode setText().
    Il suffit que tu récupère l'enregistrement que tu as sélectionné et tu fais le setText que tu veux.

    2/ Quant à ce que tu peux faire sur un JTree, les possibilités sont quasi illimitées. Si tu veux personnaliser tes icones il y a plusieurs solution tout dépend du niveau de personnalisation.

    - La premiere (la plus simple mais limitée) est de déclarer un DefaultTreeCellRenderer, d'initialiser closedIcon, openIcon et leafIcon.
    Puis d'affecter le renderer au JTree avec setTreeCellREnderer. Mais tu n'aura que trois niveau d'icone.

    - La seconde (qui offre déjà bcp plus de possibilités) est de déclarer une classe qui hérite de DefaultTreeCellRenderer et de surcharger la méthode getTreeCellRendererComponent (cf. JavaDoc pour la signature exacte). A partir de ca tu peux définir une icone en fonction du contenu de chaque cellule. Fait une recherche dans le forum avec DefaultTreeCellRenderer, tu trouveras plusieurs exemples.
    Mess with the best, die like the rest!

  9. #9
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    ah oui j'avais pas pensé au settext
    en tout cas merci bcp tu m'as bien aidé

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    Content d'avoir pu taider

    N'oublie pas de cliquer sur "Résolu" tout en bas a gauche si tu n'as plus de question

    ++
    Mess with the best, die like the rest!

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

Discussions similaires

  1. [AC-2007] État - Afficher du texte à la place d'une valeur
    Par sim911 dans le forum IHM
    Réponses: 7
    Dernier message: 30/08/2009, 19h03
  2. Réponses: 2
    Dernier message: 02/10/2006, 09h04
  3. Réponses: 1
    Dernier message: 21/09/2006, 15h13
  4. Appeler une Applet ou servlet depuis une classe java
    Par oussam dans le forum Applets
    Réponses: 2
    Dernier message: 04/07/2006, 13h58
  5. [ applet ] signer et utiliser une applet
    Par felix79 dans le forum Applets
    Réponses: 4
    Dernier message: 17/06/2004, 16h47

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