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

Agents de placement/Fenêtres Java Discussion :

BorderLayout NORTH EAST WEST


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 48
    Points : 62
    Points
    62
    Par défaut BorderLayout NORTH EAST WEST
    Bonjour, je dois placer des boutons avec chaque boutons deux checkbox, cependant je n'arrive pas à les placer correctement...
    J'aimerais les placer comme ceci:
    [ boutton ]
    [box1][box2]

    mais ils se placent à la suite[ boutton ][box1][box2],comme si la condition n'était pas prise en compte.
    Code Java : 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
     
    		for(int i=0;i<9;i++)
    			for(int j=0;j<9;j++)
    			{
    				panelCase[i][j]     = new JPanel()   ;
    				cases[i][j]           = new JButton("");
    				boxVerification[i][j] = new JCheckBox();
    				boxBloqueur[i][j]     = new JCheckBox();
     
    				(panelCase[i][j]).setLayout(new BorderLayout());
    				panelRegion[i/3][j/3].add((panelCase[i][j]).add(cases[i][j]),BorderLayout.NORTH)		;
    				panelRegion[i/3][j/3].add((panelCase[i][j]).add(boxVerification[i][j]),BorderLayout.EAST);	
    				panelRegion[i/3][j/3].add((panelCase[i][j]).add(boxBloqueur[i][j]),BorderLayout.WEST)    ;
     
    				(cases[i][j]).addActionListener(this)          ;
    				(boxVerification[i][j]).addActionListener(this);
    				(boxBloqueur[i][j]).addActionListener(this)    ;
    			}


    panelRegion au cas où

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    		for(int i=0;i<3;i++)
    			for(int j=0;j<3;j++)
    			{
    				panelRegion[i][j] = new JPanel(new GridLayout(3,3));
    				panel.add(panelRegion[i][j]);
    				(panelRegion[i][j]).setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.BLACK));
    			}

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

    Tu devrais supprimer ce qui est inutile dans ton code et plus l'aérer d'autre part, afin qu'il soit plus lisible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (panelCase[i][j]).setLayout(new BorderLayout());
    Ici les parenthèses autout de panelCase[i][j] sont inutiles.

    C'est encore plus flagrant dans l'extrait suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    panelRegion[i/3][j/3].add((panelCase[i][j]).add(cases[i][j]),BorderLayout.NORTH)		;
    Réécrit ça donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    panelRegion[i/3][j/3].add( panelCase[i][j].add( cases[i][j] ), BorderLayout.NORTH);
    En décomposant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Component component = panelCase[i][j].add( cases[i][j] ); // component est cases[i][j] au retour de l'appel de add()
    panelRegion[i/3][j/3].add( component, BorderLayout.NORTH);
    on voit que tu ajoutes cases[i][j] à un JPanel (panelCase[i][j]), surlequel tu as mis un BorderLayout. Puis tu ajoutes ce même composant à un autre panel (panelRegion[i/3][j/3]) sur lequel tu as mis un GridLayout, avec la contrainte BorderLayout.NORTH, qui ne sert à rien, puisque c'est un GridLayout et pas un BorderLayout. En plus, comme un composant SWING ne peut être placé que dans un seul conteneur à la fois, il sort de panelCase[i][j].

    Donc au final, ton composant case[i][j] a été ajouté à panelRegion[i/3][j/3], layouté par un GridLayout de 3 sur 3. Les 2 autres également : donc, normal, que tu aies les 3 composants sur une ligne.

    Décomposes plus, n'hésites pas à faire des méthodes dédiés, tu n'en auras qu'un code plus lisible, donc plus facile à mettre au point et plus facile à déboguer.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ...
     
       JPanel casePanel = creerCasePanel(cases, boxVerification, boxBloqueur, i, j);
     
       panelCase[i][j] = casePanel;
     
       panelRegion[i/3][j/3].add( casePanel ) ;
     
    ...
    et

    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
    private JPanel creerCasePanel(JButton[][] cases, JCheckBox[][] boxVerification, JCheckBox[][] boxBloqueur, int i, int j) {
     
        JPanel panel = new JPanel();
     
        cases[i][j] = new JButton("");
        boxVerification[i][j] = new JCheckBox();
        boxBloqueur[i][j]     = new JCheckBox();
     
        panel.setLayout( new BorderLayout() );
        panel.add( cases[i][j], BorderLayout.NORTH );
        panel.add( boxVerification[i][j]), BorderLayout.EAST );	
        panel.add( boxBloqueur[i][j], BorderLayout.WEST );
     
        return panel;
     
    }

    Par ailleurs, je me demande à quoi servent tous ces tableaux. Ils nuisent également à la lisibilité et ajoute de la lourdeur dans la gestion (on le voit par exemple dans les paramètres de la méthode). Si ces tableaux sont nécessaires (j'ai une idée de la raison : le test dans les actionListeners, on peut procéder de façon beaucoup plus simple, sans ces tableaux)), on peut utiliser une classe de contexte, avec tous ces tableaux en variables public dans cette classe, et passer une instance de cette classe de contexte en paramètre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Context {
        public JButton[][] cases;
        public JCheckBox[][] boxVerification;
        public JCheckBox[][] boxBloqueur;
        public int i;
        public int j;
    }
    Pour l'appel :

    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
     
     
    context = new Context();
    context.cases = cases;
    context.boxVerification = boxVerification;
    context.boxBloqueur = boxBloqueur;
     
    for(context.i=0;context.i<9;context.i++)
        for(context.j=0;context.j<9;context.j++) {
     
           JPanel casePanel = creerCasePanel(context);
     
           panelCase[context.i][context.jj] = casePanel;
     
           ...
    Pour se passer des tableaux dans les tests des ActionListener, on peut récupérer les composants sources des évenements dans les ActionEvent, ou utiliser des commandes aussi, ou utiliser des ActionListener dédiés à chaque composant (ou par lambda-expression renvoyer vers une méthode privée à laquelle on passe le composant, ou des informations qui permettent de spécialiser le traitement (le i et j par exemple, si c'est ton moyen de référencer une case).
    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 du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 48
    Points : 62
    Points
    62
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Par ailleurs, je me demande à quoi servent tous ces tableaux
    les JPanels Regions serviront aux régions du Sudoku.

    Merci, pour t'as réponse ! Qui m'aide énormément.
    Cordialement.

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

Discussions similaires

  1. Une série de JButton superposée et centrée sur l'axe Y d'un BorderLayout.EAST?
    Par sdurand dans le forum Agents de placement/Fenêtres
    Réponses: 10
    Dernier message: 16/10/2006, 14h59
  2. [Java] Empiler 2 Jpanel au north avec un BorderLayout
    Par lerotou dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 07/02/2006, 19h55
  3. [BorderLayout] Changer le composant
    Par calypso dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 12/04/2005, 11h58
  4. [débutant]borderLayout
    Par pingoui dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 16/09/2004, 10h30
  5. [Applet] BorderLayout qui ne s'affiche pas
    Par Invité(e) dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 29/04/2004, 11h39

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