Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cacher des boutons dans un container

    28 octobre 2010 à 12:17:29

    Bonjour,

    Dans mon projet, j'ai un bouton qui à pour but lors d'un clic de faire apparaître trois autres boutons dans la ligne du dessous (je fonctionne avec un gridBagLayout) et lors d'un second clic de faire disparaître ces boutons.

    Mon code actuel permet de les faire apparaître, mais je n'arrive pas à les cacher.

    J'ai essayé les méthodes .setEnabled(false) et .remove(monBouton) mais ça ne marche pas. Je doit passer à côté de quelque chose mais je ne trouve vraiment pas quoi c'est pourquoi je fait appel à la générosité de la communauté des ZéRoS =)

    Je vous laisse ci-dessous le code de mon ActionListener du premier bouton :

    // TODO Auto-generated method stub
    JButton cb = new JButton(new ImageIcon("btnCb.png"));
    JButton cheque = new JButton(new ImageIcon("btnCheque.png"));
    JButton espece = new JButton(new ImageIcon("btnEspece.png"));
    // Si les modes de paiements sont pas encore affichés alors on les
    // affiches.
    if (afficherPaiement == false) {
    	// MODE DE PAIEMENT
    	afficherPaiement = true;
    	// Par carte bancaire
    	gridBagPrincipal.gridx = 1;
    	gridBagPrincipal.gridy = 1;
    	gridBagPrincipal.weightx = 0;
    	gridBagPrincipal.insets = new Insets(-20, 0, 0, 0);
    	gridBagPrincipal.anchor = GridBagConstraints.EAST;
    	/*
    	 * Les deux méthodes suivantes permettent de définir les icones
    	 * du bouton lorsqu'il est survolé et préssé.
    	 */
    	cb.setRolloverIcon(new ImageIcon("btnCb2.png"));
    	cb.setPressedIcon(new ImageIcon("btnCb3.png"));
    	/*
    	 * Les trois méthodes suivantes permettent de cacher le bouton
    	 * derrière l'image
    	 */
    	cb.setBorderPainted(false);
    	cb.setFocusPainted(false);
    	cb.setContentAreaFilled(false);
    	/* Spécifier les tailles du bouton */
    	cb.setMinimumSize(null); 
    	containerPrincipal.add(cb, gridBagPrincipal);
    	// Par Cheque
    	gridBagPrincipal.gridx = 2;
    	/*
    	 * Les deux méthodes suivantes permettent de définir les icones
    	 * du bouton lorsqu'il est survolé et préssé.
    	 */
    	cheque.setRolloverIcon(new ImageIcon("btnCheque2.png"));
    	cheque.setPressedIcon(new ImageIcon("btnCheque3.png"));
    	/*
    	 * Les trois méthodes suivantes permettent de cacher le bouton
    	 * derrière l'image
    	 */
    	cheque.setBorderPainted(false);
    	cheque.setFocusPainted(false);
    	cheque.setContentAreaFilled(false);
    	containerPrincipal.add(cheque, gridBagPrincipal);
    	// En espece
    	gridBagPrincipal.gridx = 3;
    	gridBagPrincipal.weightx = gridBagPrincipal.REMAINDER;
    	/*
    	 * Les deux méthodes suivantes permettent de définir les icones
    	 * du bouton lorsqu'il est survolé et préssé.
    	 */
    	espece.setRolloverIcon(new ImageIcon("btnEspece2.png"));
    	espece.setPressedIcon(new ImageIcon("btnEspece3.png"));
    	/*
    	 * Les trois méthodes suivantes permettent de cacher le bouton
    	 * derrière l'image
    	 */
    	espece.setBorderPainted(false);
    	espece.setFocusPainted(false);
    	espece.setContentAreaFilled(false);
    	containerPrincipal.add(espece, gridBagPrincipal);
    } else { // Sinon si ils sont déjà affichés alors on les cache.
    	afficherPaiement = false;
    	cb.setEnabled(false);
    	cheque.setEnabled(false);
    	espece.setEnabled(false);
    
    // 	C'est la deuxième méthode que j'ai essayé mais qui ne marche pas non plus 
    //	containerPrincipal.remove(cb);
    }
    // Mise à jour du container du magasin
    Magasin.containerCaisse.validate();
    


    Merci d'avance de votre aide amis zéros. :)
    • Partager sur Facebook
    • Partager sur Twitter
      28 octobre 2010 à 13:52:31

      Normalement avec un remove(bouton) sur le panel, un validate() et un repaint, tes problèmes devrient être réglés.

      Montre nous plutot comment tu s implémenté ça, pour que l'on voit ou sa cloche.
      • Partager sur Facebook
      • Partager sur Twitter
      J'ai tous les badges d'OpenClassrooms.
        28 octobre 2010 à 14:00:18

        Citation : willard

        Normalement avec un remove(bouton) sur le panel, un validate() et un repaint, tes problèmes devrient être réglés.



        Je ne peux que plussoyer mais si il veut juste les faire disparaitre, et non les supprimer du containeur (vous me suivez ?), pourquoi ne pas simplement faire un JComponent.setVisible(false); ?
        • Partager sur Facebook
        • Partager sur Twitter
          28 octobre 2010 à 14:08:41

          Citation : Draewil

          Citation : willard

          Normalement avec un remove(bouton) sur le panel, un validate() et un repaint, tes problèmes devrient être réglés.



          Je ne peux que plussoyer mais si il veut juste les faire disparaitre, et non les supprimer du containeur (vous me suivez ?), pourquoi ne pas simplement faire un JComponent.setVisible(false); ?



          En effet, tout dépend ce qu'il veut faire. En sachant que le setVisible(false) conserve le container en mémoire, Alors que le remove() t'oblige à recreer l'objet si tu en a besoin plus tard.
          • Partager sur Facebook
          • Partager sur Twitter
          J'ai tous les badges d'OpenClassrooms.
            28 octobre 2010 à 14:47:00

            (Pour commencer merci de vous intéresser à ce sujet^^)

            Alors, peu importe en fait la manière d'y arriver mais je souhaite juste que ces boutons apparaissent lorsque je clic sur un autre bouton et disparaisse lors d'un second clic. Sachant que ces taches pourraient être un bon nombre de fois lors de l'utilisation du logiciel.

            Je vais vous montrer le code mais pour que vous compreniez peut être mieux, le projet est la construction d'une caisse enregistreuse.
            Le premier bouton dont je vous parle se nomme "paiement" et il permet d'activer trois autres boutons "cb", "cheque" et "espece". Je suppose que vous avez compris ce que je veut obtenir^^


            Donc ici je crée ma caisse (j'ai enlever tout ce qui ne nous concerne pas):



            public class Caisse extends JFrame {
            	public static JPanel containerPrincipal = new JPanel();
            	GridBagConstraints gridBagPrincipal = new GridBagConstraints();
            	boolean afficherPaiement;
            	private JTabbedPane onglet;
            
            	/*
            	 * Constructeur Caisse
            	 */
            	public Caisse() throws FileNotFoundException, IOException {
            		containerPrincipal.setOpaque(false);
            		containerPrincipal.setPreferredSize(new Dimension(1200,800)); 
            
            		initialisation();
            	}
            
            	/*
            	 * Initialisation d'une nouvelle Caisse
            	 */
            	private void initialisation() throws FileNotFoundException, IOException {
            
            
            
            		// Début GridBag
            		containerPrincipal.setLayout(new GridBagLayout());
            
            
            		// Paiement
            		afficherPaiement = false;
            		gridBagPrincipal.gridx = 1;
            		gridBagPrincipal.gridy = 0;
            		gridBagPrincipal.weightx = 1.;
            		gridBagPrincipal.insets = new Insets(40, 0, 0, 0);
            		gridBagPrincipal.gridwidth = 3;
            		gridBagPrincipal.gridwidth = GridBagConstraints.REMAINDER;
            		JButton paiement = new JButton();
            		/*
            		 * Les trois méthodes suivantes permettent de définir les icones du
            		 * bouton lorsqu'il est normal, survolé et préssé.
            		 */
            		paiement.setIcon(new ImageIcon("btnCadis.png"));
            		paiement.setRolloverIcon(new ImageIcon("btnCadis2.png"));
            		paiement.setPressedIcon(new ImageIcon("btnCadis3.png"));
            		/*
            		 * Les trois méthodes suivantes permettent de cacher le bouton derrière
            		 * l'image
            		 */
            		paiement.setBorderPainted(false);
            		paiement.setFocusPainted(false);
            		paiement.setContentAreaFilled(false);
            		paiement.addActionListener(new modePaiement()); 
            
            		containerPrincipal.add(paiement, gridBagPrincipal);
            
            
            
            		// Affichage du container
            		this.setContentPane(containerPrincipal);
            	}
            }
            





            Ensuite dans cette classe, j'en ai ajouté une autre qui doit afficher ou masquer les trois boutons. C'est celle que je vous ai montré tout à l'heure. Je vous la remet avec l'implémentation.



            class modePaiement implements ActionListener {
            
            		@Override
            		public void actionPerformed(ActionEvent e) {
            			// TODO Auto-generated method stub
            			JButton cb = new JButton(new ImageIcon("btnCb.png"));
            			JButton cheque = new JButton(new ImageIcon("btnCheque.png"));
            			JButton espece = new JButton(new ImageIcon("btnEspece.png"));
            			// Si les modes de paiements sont pas encore affichés alors on les
            			// affiches.
            			if (afficherPaiement == false) {
            				// MODE DE PAIEMENT
            				afficherPaiement = true;
            				// Par carte bancaire
            				gridBagPrincipal.gridx = 1;
            				gridBagPrincipal.gridy = 1;
            				gridBagPrincipal.weightx = 0;
            				gridBagPrincipal.insets = new Insets(-20, 0, 0, 0);
            				gridBagPrincipal.anchor = GridBagConstraints.EAST;
            				/*
            				 * Les deux méthodes suivantes permettent de définir les icones
            				 * du bouton lorsqu'il est survolé et préssé.
            				 */
            
            				cb.setRolloverIcon(new ImageIcon("btnCb2.png"));
            				cb.setPressedIcon(new ImageIcon("btnCb3.png"));
            				/*
            				 * Les trois méthodes suivantes permettent de cacher le bouton
            				 * derrière l'image
            				 */
            				cb.setBorderPainted(false);
            				cb.setFocusPainted(false);
            				cb.setContentAreaFilled(false);
            				/* Spécifier les tailles du bouton */
            				cb.setMinimumSize(null); 
            				containerPrincipal.add(cb, gridBagPrincipal);
            
            				// Par Cheque
            				gridBagPrincipal.gridx = 2;
            				/*
            				 * Les deux méthodes suivantes permettent de définir les icones
            				 * du bouton lorsqu'il est survolé et préssé.
            				 */
            				cheque.setRolloverIcon(new ImageIcon("btnCheque2.png"));
            				cheque.setPressedIcon(new ImageIcon("btnCheque3.png"));
            				/*
            				 * Les trois méthodes suivantes permettent de cacher le bouton
            				 * derrière l'image
            				 */
            				cheque.setBorderPainted(false);
            				cheque.setFocusPainted(false);
            				cheque.setContentAreaFilled(false);
            
            				containerPrincipal.add(cheque, gridBagPrincipal);
            
            				// En espece
            				gridBagPrincipal.gridx = 3;
            				gridBagPrincipal.weightx = gridBagPrincipal.REMAINDER;
            				/*
            				 * Les deux méthodes suivantes permettent de définir les icones
            				 * du bouton lorsqu'il est survolé et préssé.
            				 */
            				espece.setRolloverIcon(new ImageIcon("btnEspece2.png"));
            				espece.setPressedIcon(new ImageIcon("btnEspece3.png"));
            				/*
            				 * Les trois méthodes suivantes permettent de cacher le bouton
            				 * derrière l'image
            				 */
            				espece.setBorderPainted(false);
            				espece.setFocusPainted(false);
            				espece.setContentAreaFilled(false);
            
            				containerPrincipal.add(espece, gridBagPrincipal);
            			} else { // Sinon si ils sont déjà affichés alors on les cache.
            				afficherPaiement = false;
            				cb.setEnabled(false);
            				cheque.setEnabled(false);
            				espece.setEnabled(false);
            				
            //				containerPrincipal.remove(cb);
            			}
            			// Mise à jour du container du magasin
            			Magasin.containerCaisse.validate();
            		}
            
            	}
            




            Et j'ai essayé aussi le .setVisible(false) mais ça ne marche pas non plus... :(
            • Partager sur Facebook
            • Partager sur Twitter

            Cacher des boutons dans un container

            × 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