Partage
  • Partager sur Facebook
  • Partager sur Twitter

Modifier le contenu de la fenêtre dynamiquement

:P

    17 novembre 2010 à 15:24:31

    Bonjour à tous :) ,

    J'aimerais modifier les composants de ma fenêtre dynamiquement.
    Voici mon code rétréci (je souhaite ne plus afficher quelques chose lorsque on a cliqué sur un bouton)
    //Constructeur...
    
    init(false);
    
    public init(boolean mon_booleen){
    
      //Pleins de trucs...
    
      if(!mon_booleen)
         //Je mets des composants
    
    
    }
    
    class BoutonListener implements ActionListener{
    
     public void actionPerformed(ActionEvent e){
        
       init(true);
    
     }
    
    }
    


    Avec ce code, le composant ne devrait pas s'enlever puisque après avoir déclenché l'action le booleen vaut true?

    Merci d'avance,
    • Partager sur Facebook
    • Partager sur Twitter
      17 novembre 2010 à 15:30:05

      Quand tu clic sur ton bouton tu réinitialise ton objet donc tu perd tes composants.
      Comme tu es a true, il ne les remet pas
      • Partager sur Facebook
      • Partager sur Twitter
        17 novembre 2010 à 15:30:51

        Ben oui, c'est ça mon but. ^^
        Sauf que ça marche pas
        • Partager sur Facebook
        • Partager sur Twitter
          17 novembre 2010 à 15:33:47

          On pourrait avoir la classe en entier? Parce qu'a priori le problème ne vient pas du bout de code que tu nous a donné
          • Partager sur Facebook
          • Partager sur Twitter
            17 novembre 2010 à 15:41:03

            Ok, tiens (ya pas tout mais je pense que certaine choses ce sont pas nécéssaires)
            public class MaClasse{
            
              public MaClasse(){
                
                //...
                   
                    init(false);
            
               }
            
            public init(boolean mon_booleen){
            
              //Pleins de trucs...
            
              if(!mon_booleen){
            
                   JLabel img = new JLabel(new ImageIcon("image.png"));   
                   img.addMouseListener(new ImgListener());
                   this.getContentPane().add(img, BorderLayout.NORTH);
            
              }
                
            
            }
            
            class ImgListener implements MouseListener{
            
             public void mouseClicked(MouseEvent e){
                
               init(true);
            
             }
            
             //Les autres méthodes de l'interface...
            
            }
            
            }
            
            • Partager sur Facebook
            • Partager sur Twitter
              17 novembre 2010 à 15:43:55

              Question bête : tu fais un repaint() ; validate(); après ajout de ton Label ?
              • Partager sur Facebook
              • Partager sur Twitter
              J'ai tous les badges d'OpenClassrooms.
                17 novembre 2010 à 15:47:35

                Citation : Scronchh

                Euh...non... Je devrais? :-°


                Oui, la fenetre ne va pas se réactualiser toute seule si tu ne lui donne pas un petit coup de pousse (repaint(), redimensionnement manuel de la fenetre , ...)
                • Partager sur Facebook
                • Partager sur Twitter
                J'ai tous les badges d'OpenClassrooms.
                  17 novembre 2010 à 15:49:25

                  Ah... Donc je mets le repaint() dans la méthode mouseClicked ou init?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 novembre 2010 à 16:04:02

                    Plus logique de le mettre dans la méthode init(), comme ça si tu dois réutiliser la méthode ailleus, tu n'as plus besoin de te soucier du repaint().
                    • Partager sur Facebook
                    • Partager sur Twitter
                    J'ai tous les badges d'OpenClassrooms.
                      17 novembre 2010 à 20:51:55

                      public class MaClasse{
                      
                        public MaClasse(){
                          
                          //...
                             
                              init(false);
                      
                         }
                      
                      public init(boolean mon_booleen){
                      
                        //Pleins de trucs...
                      
                        if(!mon_booleen){
                      
                             JLabel img = new JLabel(new ImageIcon("image.png"));   
                             img.addMouseListener(new ImgListener());
                             this.getContentPane().add(img, BorderLayout.NORTH);
                      
                             repaint();
                      
                        }
                          
                      
                      }
                      
                      class ImgListener implements MouseListener{
                      
                       public void mouseClicked(MouseEvent e){
                          
                         init(true);
                      
                       }
                      
                       //Les autres méthodes de l'interface...
                      
                      }
                      
                      }
                      


                      Il ne se passe toujours rien :(
                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 novembre 2010 à 20:56:46

                        rajoute aussi après le repaint(); un "validate()"
                        • Partager sur Facebook
                        • Partager sur Twitter
                        J'ai tous les badges d'OpenClassrooms.
                          17 novembre 2010 à 21:06:35

                          Quand je fais ça, mon image se dédouble >_<
                          • Partager sur Facebook
                          • Partager sur Twitter
                            17 novembre 2010 à 21:15:00

                            Citation : Scronchh

                            Quand je fais ça, mon image se dédouble >_<



                            C'était pas le but ? :D

                            Normalement avec ça, tu aura une nouvelle image a chaque clic, si tu veux eviter ça, et ben il faut faire sortir le new JLabel() de ta méthode. Et ne plus faire de add(), mais plutot des setVisible(true/false)
                            • Partager sur Facebook
                            • Partager sur Twitter
                            J'ai tous les badges d'OpenClassrooms.
                              17 novembre 2010 à 21:16:21

                              On s'est pas compris :p
                              Ce que je veux c'est que l'image disparaisse pas qu'elle se dédouble ^^
                              • Partager sur Facebook
                              • Partager sur Twitter
                                17 novembre 2010 à 21:21:33

                                JLabel img = new JLabel(new ImageIcon("image.png"));
                                
                                public init(boolean mon_booleen){
                                  //Pleins de trucs...
                                  if(!mon_booleen){
                                       img.addMouseListener(new ImgListener());
                                       this.getContentPane().add(img, BorderLayout.NORTH);
                                  }
                                  else
                                  {
                                       this.getContentPane().remove(img);
                                  }
                                  repaint();
                                  validate();
                                }
                                


                                Je n'ai pas toutes les méthodes en têtes, il se peut que certaines ne soit pas à la bonne syntaxe.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                J'ai tous les badges d'OpenClassrooms.
                                  17 novembre 2010 à 21:24:17

                                  D'après ce que j'ai compris, ce que tu veux c'est :

                                  • - Commencer par afficher l'image
                                  • - Effacer (ou du moins masquer) l'image lors de l'appui sur celle-ci


                                  Je vous propose d'essayer cet autre code (je ne dis pas que c'est le meilleur :D ) :
                                  public class MaClasse{
                                  
                                  private JLabel img;
                                  
                                    public MaClasse(){
                                      
                                      //...
                                         
                                          init(false);
                                  
                                     }
                                  
                                  public init(boolean mon_booleen){
                                  
                                    //Pleins de trucs...
                                         img = new JLabel(new ImageIcon("image.png"));   
                                         img.addMouseListener(new ImgListener());
                                         this.getContentPane().add(img, BorderLayout.NORTH);
                                         afficherOnOff(mon_boolean);
                                  }
                                  
                                  public void afficherOnOff(boolean b){
                                        if(b) img.setVisible(false);
                                        else img.setVisible(true);
                                         
                                        this.repaint();
                                  }
                                  
                                  class ImgListener implements MouseListener{
                                  
                                   public void mouseClicked(MouseEvent e){
                                      
                                     afficherOnOff(true);
                                  
                                   }
                                  
                                   //Les autres méthodes de l'interface...
                                  
                                  }
                                  
                                  }
                                  
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    17 novembre 2010 à 21:35:22

                                    Merci à vous deux, ça marche. :)

                                    Mais avant de vous libérer j'ai un dernier problème à vous faire résoudre :p (si vous le voulez bien)
                                    C'est tout bête, je n'arrive pas à placer des composant dans un boîte de dialogue, mais pourtant j'ai lu et relu mon code :
                                    class BoiteDialogue extends JDialog{
                                    
                                      public BoiteDialogue(){
                                    
                                        //Blabla...
                                    
                                        init();
                                    
                                      }
                                    
                                      private void init(){
                                    
                                        this.getContentPane().add(new JButton("Mon bouton", BorderLayout.NORTH);     
                                    
                                      }
                                    
                                    
                                    }
                                    


                                    Ce code tout bête ne fonctionne pas (la boite de dialogue est vide)... Un p'tit coup de main? :)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      17 novembre 2010 à 21:51:26

                                      Tu fais bien le setVisible(true) du JDialog après le init() ?
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      J'ai tous les badges d'OpenClassrooms.
                                        17 novembre 2010 à 21:55:05

                                        Ouh... Autant pour moi :p
                                        Mais il se passe quelque chose de bizarre, la boite de dialogue s'affiche (vide) puis quand je la ferme une deuxième apparait (pleine ^^ )
                                        Comment ça se fait?
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          17 novembre 2010 à 21:59:05

                                          Montre le code qui te permet d'ouvrir la boite de dialogue.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          J'ai tous les badges d'OpenClassrooms.
                                            17 novembre 2010 à 22:01:38

                                            BoiteDialogue bd = new BoiteDialogue(null, "Titre", false, "type");
                                            bd.setVisible(true);
                                            
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              17 novembre 2010 à 22:02:57

                                              cette ligne:
                                              bd.setVisible(true);
                                              

                                              Ne dois plus exister, parce qu'elle est remplacée par le setVisible(true) que tu as rajouté dans ton constructeur.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              J'ai tous les badges d'OpenClassrooms.
                                                17 novembre 2010 à 22:07:12

                                                Ah oui, j'avais 2 setVisible(true), c'est vrai ^^ .
                                                Merci et je vais tenter de ne plus créer un topic pendant quelques jours, pour me faire pardonner mes étourderies ^^
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  17 novembre 2010 à 22:09:14

                                                  Il est 22h et je crois que tu as besoin de dormir :D

                                                  Sinon n'oublie pas de mettre ton sujet en résolu.
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  J'ai tous les badges d'OpenClassrooms.
                                                    21 novembre 2010 à 16:26:12

                                                    Salut :) ,

                                                    Bon alors je remonte le sujet car je rencontre à nouveau un problème pour modifier le contenu de la fenêtre.
                                                    J'ai ce code :
                                                    //....
                                                    
                                                    private void init(boolean fichier_op){
                                                    
                                                      //...
                                                    
                                                      modifier_contenu(fichier_op);
                                                       
                                                       //...
                                                    
                                                    
                                                    }
                                                    
                                                    
                                                    private void modifier_contenu(boolean op){
                                                    
                                                       if(op){
                                                        
                                                            jl.setVisible(false);
                                                    	 jl2.setVisible(false);
                                                     
                                                    
                                                           //Ajouts de composants....
                                                    
                                                         this.repaint();
                                                    
                                                       }
                                                       
                                                    
                                                    
                                                    }
                                                    


                                                    Seul problème (et bizarre en plus), dans la méthode modifier_contenu() seul les setVisible(false) marchent, les autres composants ne s'ajoutent pas.

                                                    Quelle en est la raison?

                                                    Merci d'avance ^^
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      21 novembre 2010 à 17:52:01

                                                      qu est ce que tu fais exactement dans l'ajout des composant?
                                                      tu n'aurais pas oublié le validate() après le repaint(). ?
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      J'ai tous les badges d'OpenClassrooms.
                                                        21 novembre 2010 à 17:57:57

                                                        Merci de ta réponse :)

                                                        Si je l'ai mis, là c'était une version allégée de mon code.
                                                        Mais vu la situation, voici mon code entier (ou presque ^^ )

                                                        public class Fenetre{
                                                        
                                                          //Déclarations des variables...
                                                          
                                                          public Fenetre(){
                                                        	
                                                        	
                                                        		this.setTitle("Logiciel");
                                                        		
                                                        		this.setSize(800, 800);
                                                        		
                                                        		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                                                        		
                                                        		this.setVisible(true);
                                                        		
                                                        		init(false);
                                                        		
                                                        	}
                                                        
                                                               private void init(boolean fichier_op){
                                                        			
                                                        		
                                                        		
                                                        		
                                                        		if(!fichier_op){
                                                        		
                                                        			JPanel pan_img = new JPanel();
                                                        		
                                                        			pan_img.add(jl);
                                                        			pan_img.add(jl2);
                                                        		
                                                        			
                                                        			this.getContentPane().add(pan_img, BorderLayout.CENTER);
                                                        	
                                                        		
                                                        			
                                                        			jl.addMouseListener(new JlListener());
                                                        			jl2.addMouseListener(new Jl2Listener());
                                                        	
                                                        		
                                                        		}
                                                        		
                                                        		afficherOnOff(fichier_op);
                                                        		
                                                        	
                                                        		
                                                        		menuBar.add(menu_fichier);
                                                        		//Ajouts d'autres composants en rapport avec le menu...
                                                        		
                                                        		
                                                        		item_new.addActionListener(new ItemNewListener());
                                                        		//Ajouts d'autres actions...
                                                                          
                                                        		
                                                        		this.setJMenuBar(menuBar);
                                                        
                                                        
                                                        	
                                                        		}
                                                        
                                                        
                                                        
                                                                public void afficherOnOff(boolean op){
                                                        	      if(op){ 
                                                        	    	  
                                                        	  jl.setVisible(false);
                                                        	  jl2.setVisible(false);
                                                        	    	  	
                                                        	 JPanel pan_center = new JPanel();
                                                        	JPanel pan_bas = new JPanel();
                                                        					
                                                        pan_center.setBackground(Color.white);
                                                         pan_bas.add(nom_projet, BorderLayout.WEST);
                                                        					
                                                        DefaultMutableTreeNode racine = new DefaultMutableTreeNode("Racine"); 
                                                        //Je finis mon arbre...
                                                        
                                                        
                                                        					
                                                        	pan_bas.setPreferredSize(new Dimension(220, 20));
                                                        					
                                                        					
                                                        					JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, arbre, pan_center);
                                                        					split.setDividerSize(5);
                                                        					split.setDividerLocation(150);
                                                        				
                                                        				
                                                        this.getContentPane().add(split, BorderLayout.CENTER);
                                                        this.getContentPane().add(pan_bas, BorderLayout.SOUTH);
                                                        	    	  	
                                                        					
                                                        repaint();  
                                                        validate();
                                                        	      }  
                                                        	      
                                                        
                                                          
                                                        
                                                        
                                                        }
                                                        


                                                        Et les labels disparaissent mais les autres composants ne s'ajoutent pas
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter

                                                        Modifier le contenu de la fenêtre dynamiquement

                                                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                        • Editeur
                                                        • Markdown