Position sur le panel reste fixe

Messages postés
11
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
31 mars 2011
- - Dernière réponse : bbagnes
Messages postés
11
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
31 mars 2011
- 10 mars 2011 à 16:33
Bonjour à tous,
J'utilise un tableau de bouton que j'ai mis au préalable dans un layout et lorsque je clique sur un bouton il doit disparaitre (setVisible(false)), mon problème est que mon tableau rétrécie c'est à dire que les autres boutons bougent , ils se resserrent les uns avec les autres.
Donc j'aimerais bien savoir s'il y a un moyen de fixer le contenu de mon tableau sur le panel et de faire en sorte que la position de mes boutons ne bougent pas.
Merci de bien vouloir me répondre
Afficher la suite 

10 réponses

0
Merci
Salut,

Tu es vraiment obligé de faire disparaître le bouton ?

Car tu pourais dès qu'un bouton est utilisé invalider le clique en utilisant:
leBouton.setEnabled(false);
comme dans cette petite démo:
   import javax.swing.* ; 
   import java.awt.* ; 
   import java.awt.event.* ;
   import java.util.Scanner;
    
   class Fen1Bouton2 extends JFrame implements ActionListener 
   { 
      private JButton monBouton1; 
      private JButton monBouton2; 
      private JButton monBouton3; 
      private JButton monBoutonFin;
      
      public Fen1Bouton2() 
      { 
         setTitle ("Quatre boutons") ; 
         setSize (300, 200) ; 
         getContentPane().setLayout(new FlowLayout()) ;
         
// Les quatre boutons sont tous setEnabled(true) par défaut

         monBouton1 = new JButton ("CLAVIER") ;
         getContentPane().add(monBouton1) ; 
         monBouton1.addActionListener(this);
         
         
         monBouton2 = new JButton ("B2") ; 
         getContentPane().add(monBouton2) ; 
         monBouton2.addActionListener(this);
         
         monBouton3 = new JButton ("B3") ; 
         getContentPane().add(monBouton3) ; 
         monBouton3.addActionListener(this);
         
         monBoutonFin = new JButton ("FIN") ; 
         getContentPane().add(monBoutonFin) ; 
         monBoutonFin.addActionListener(this);
      }
      
      public void clavier()
      {
         Scanner clavier =new Scanner(System.in); 
      
         System.out.print("\nEntrer une valeur(int): "); 
         int n =clavier.nextInt();
         System.out.println("\nVous avez saisi " + n);
         monBouton1.setEnabled(false);
      }
      
      public void actionPerformed( ActionEvent ev )
      {
         Object src = ev.getSource(); 
         if( src == monBouton1 ) 
         { 
         //traitement monBouton1
            System.out.println("Traitement de CLAVIER");
            clavier();
         }
         if( src == monBouton2) 
         {
         //traitement monBouton2
            System.out.println("Traitement de B2");
            monBouton2.setEnabled(false);
         }
         if( src == monBouton3) 
         {
         //traitement monBouton3
            System.out.println("Traitement de B3");
            monBouton3.setEnabled(false);
         }
         if( src == monBoutonFin) 
         {
         //traitement monBoutonFin
            System.out.println("Traitement de FIN");
            System.exit(0);
         } 
      }
   }
  
   public class Bouton2 
   {
  
      public static void main (String args[]) 
      { 
         Fen1Bouton2 fen = new Fen1Bouton2() ; 
         fen.setVisible(true) ;
         
         fen.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      } 
   }

Je n'ai pas eu le temps de placer les boutons verticalement mais le principe est là...

Cordialement,


...\ Dan /...
Commenter la réponse de Utilisateur anonyme
Messages postés
11
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
31 mars 2011
0
Merci
Merci pour la réponse mais non il faut obligatoirement que le joueur ne puisse plus voir le bouton parce que c'est un jeu ou il faut éliminer les paires.
Commenter la réponse de bbagnes
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
21
0
Merci
Salut,

Le GridLayout fonctionne bien chez moi, jdk 1.7 :

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 * Le GridLayout est ton ami.
 * 
 * @author guehenneux
 * 
 */
public class TestLayout extends JPanel {

/**
 * UID genere le 07/03/2011
 */
private static final long serialVersionUID = 2849472175150609066L;

private JButton bouton1;
private JButton bouton2;
private JButton bouton3;
private JButton bouton4;

/**
 * 
 */
public TestLayout() {

super(new GridLayout(2, 2));

bouton1 = new JButton("1");
bouton2 = new JButton("2");
bouton3 = new JButton("3");
bouton4 = new JButton("4");

add(bouton1);
add(bouton2);
add(bouton3);
add(bouton4);

bouton1.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent evenement) {
bouton1.setVisible(false);
}

});

bouton2.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent evenement) {
bouton2.setVisible(false);
}

});

bouton3.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent evenement) {
bouton3.setVisible(false);
}

});

bouton4.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent evenement) {
bouton4.setVisible(false);
}

});

}

/**
 * 
 * @param arguments
 */
public static void main(String... arguments) {

TestLayout testLayout = new TestLayout();

JFrame fenetreTest = new JFrame();
fenetreTest.add(testLayout);
fenetreTest.pack();
fenetreTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenetreTest.setVisible(true);

}

}
Commenter la réponse de cs_jojolemariole
Messages postés
11
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
31 mars 2011
0
Merci
Ah bon? moi j'utilise un gridBag Layout c'est peu être pour sa mais je vois pas pourquoi il se réajuste automatiquement peut être qu'il y a des paramètres qu'il faut désactiver?
Et aussi l'affichage se fait dans une applet je sais pas si sa change grand chose
Commenter la réponse de bbagnes
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
21
0
Merci
Salut,

Ok je comprends mieux. Le GridBagLayout adapte la taille des lignes et colonnes en fonction du contenu. J'imagine que quand une colonne ou une ligne se vide l'espace attribué est réduit au minimum. À mon avis, il ne convient pas à ton usage. Préfère le GridLayout qui lui divise l'espace de manière régulière quelle que soit la taille du contenu. Rien ne t'empêche de gérer le reste de ton interface avec un autre Layout, au contraire.
Commenter la réponse de cs_jojolemariole
Messages postés
11
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
31 mars 2011
0
Merci
Salut ,
Oui mais la configuration que je recherche j'ai pas réussi à la faire avec un grid layout parce que j'ai des boutons superposé et certains ne sont pas a coté les uns des autres.
je suis en train de coder le jeu Majhongs donc vous pourrez voir que sa a une configuration particulière.
Commenter la réponse de bbagnes
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
21
0
Merci
Re,

Au temps pour moi, je pensais que c'était le jeu où on a doit faire des paires avec des cartes face cachée.

Dans ce cas là, tu pourrais peut-être envisager de mettre un Layout null afin de déterminer manuellement la position de chaque tuile?
Commenter la réponse de cs_jojolemariole
Messages postés
11
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
31 mars 2011
0
Merci
Salut ,

Mettre manuellement les positions des 144 tuiles c'est un peu trop compliqués.
Mais merci d'avoir essayé de m'aider.
Commenter la réponse de bbagnes
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
21
0
Merci
Salut,

De rien, mais essaie quand même. Tu peux utiliser des boucles, il y a quand même une certaine régularité, non?
Commenter la réponse de cs_jojolemariole
Messages postés
11
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
31 mars 2011
0
Merci
Salut
j'ai trouvée une solution pas très orthodoxe mais sa marche j'ai ajouté une rangé de bouton en dessous de la dernière rangé donc une ligne ne se vide jamais entièrement7
Merci
Commenter la réponse de bbagnes