Partage
  • Partager sur Facebook
  • Partager sur Twitter

Aide GridBagLayout

    19 mai 2016 à 15:05:42

    Hello,

    Je fais l'exo calculatrice et forcément j'ai choisis la façon présentée comme la plus ardue, le gridbaglayout.

    J'arrive "Sans problèmes" (Euphemisme puisque que ce fût long pour trouver comment faire) à faire une grille de 3x3 avec au dessus une ligne indiquant pour l'instant 0.

    Mon but est de faire cette grille, avec la barre de chiffre au dessus puis à côté des chiffres mettres mes 5 boutons restant, étant les multiplicateur + - * / et le rest C.

    Cependant, mes boutons sont centré et compté comme 90x60.  Ceci étant un soucis mineur, j'ai beau essayer de les placer sur une ligne de 4, dès que j'en fait une le 4eme est masqué, et si je les met tous ils sont alignés et la ligne fait 8 de long (Ce qui donne ça http://i.imgur.com/wZ9RIJY.png)

    Hors j'aimerais obtenir quelque chose comme mes multiplicateurs alignés comme il faut avec l'espace réellement utilisés en hauteur (240px) et non par rapport au nombre de case)

    En fait j'ai beau relire et relire 3 paragraphes de placement de boutons, je pige vraiment rien du tout. Je vais finir par croire que je suis incompatible avec le java :/.

    • Partager sur Facebook
    • Partager sur Twitter
    "L'art est une arme" ~ Blue Stahli
      19 mai 2016 à 15:28:11

      Salut,

      Il ne faut pas déclarer combien de cellule vont former le Layout au debut ? (3x3 par exemple)

      Montre du code que l'on puisse tester ;) (si possible ta classe JFrame et Panel)

      • Partager sur Facebook
      • Partager sur Twitter
        19 mai 2016 à 20:29:46

        Bonsoir,

        Je suppose que tu veux faire ça

        Si tu comptes bien, il y a 3 lignes verticales et 7 lignes horizontales, donc ça fait une grille 4x8.

        Certains boutons devront être sur deux lignes. Ca se règle avec gridheight.

        Exemple, pour le bouton 7, tu auras

        gbc.gridx = 0;
        gbc.gridy = 6;
        gbc.gridheight = 2;



        • Partager sur Facebook
        • Partager sur Twitter
          19 mai 2016 à 21:45:56

          Tient j'ai fait une calculette en gridbaglayout pour aider un mec ici : https://openclassrooms.com/forum/sujet/interieure-fenetre-qui-met-du-temps-a-s-afficher?page=1#message-91061812

          Si tu veux faire comme brubru777 dit il te faut :

          gbc.fill = GridBagConstraints.BOTH;
          gbc.gridwidth = gbc.gridheight = 1;
          gbc.weightx = gbc.weighty = 1;
          
          // pour les chiffres
          
          gbc.weighty = 4/5
          
          // pour la colonne à droite

          en effet tu as 4 de haut pour les chiffres, et 5 de haut à droite, donc à droite les cellules doivent avoir un poid de 4/5 et celles de droite de 1 ^^. Tu peux donner un poid de 5 à droite et 4 à gauche hein aucune différence ^^.

          Oublie pas de jouer avec les gridx et gridy pour les placer ou tu veux ça marche comme dans un tableau ^^.

          • Partager sur Facebook
          • Partager sur Twitter
          @autor VinYarD
          Anonyme
            19 mai 2016 à 22:23:32

            Je vais finir par croire que je suis incompatible avec le java :/.

            Rassure-toi, bien que ça soit cross-platform, la conception d'interface graphique en Java est assez lourde, ça n'a rien à voir avec toi.

            C'est d'ailleurs pour cette raison que j'utilise JavaFX pour concevoir mes interfaces. (XML)

            • Partager sur Facebook
            • Partager sur Twitter
              20 mai 2016 à 13:34:50

              Merci pour vos réponses, en effet c'est plus clair maintenant :).

              @SongBird239 : Merci ça me rassure x).

              • Partager sur Facebook
              • Partager sur Twitter
              "L'art est une arme" ~ Blue Stahli
                24 mai 2016 à 14:16:43

                Hello, petit retour,

                j'ai essayer mais rien toujours. Voilà ce que j'obtiens : http://i.imgur.com/7qbkavw.png

                J'ai même essayer de m'entrainer en dessinant un truc à la main avec des carrés et ai voulu le refaire mais même un truc basique comme ça : http://i.imgur.com/UIRI7gB.png  je n'arrive pas à le faire...

                Voici le code de ma fenêtre : (Ensuite elle est instanciée normalement dans une autre class) Le code est surement un peu fouillit, j'ai beaucoup bidouillé. Et vraiment je ne pige rien, je ne sais même pas quoi sert à quoi et quoi modifier pour obtenir quoi. (C'est dire si je suis embrouillé x)

                import java.awt.BorderLayout;
                import java.awt.Color;
                import java.awt.Dimension;
                import java.awt.Font;
                import java.awt.GridBagConstraints;
                import java.awt.GridBagLayout;
                import java.awt.GridLayout;
                
                import javax.swing.BoxLayout;
                import javax.swing.JButton;
                import javax.swing.JFrame;
                import javax.swing.JLabel;
                import javax.swing.JPanel;
                import javax.swing.JButton;
                import javax.swing.SwingConstants;
                
                public class Fenetre extends JFrame{
                
                  public Fenetre(){
                    this.setTitle("GridBagLayout");
                    this.setSize(400,400);
                    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    
                    //On crée nos différents conteneurs de couleur différente
                    JLabel cell1 = new JLabel();
                    cell1.setText("0");
                    cell1.setPreferredSize(new Dimension(90, 60));	
                    cell1.setBackground(Color.LIGHT_GRAY);
                    cell1.setOpaque(true);
                    cell1.setForeground(Color.yellow);
                    Font police = new Font("Verdana", Font.BOLD, 16);
                    cell1.setFont(police);
                    cell1.setHorizontalAlignment(JLabel.RIGHT);
                    
                    JButton cell2 = new JButton("1");
                    cell2.setPreferredSize(new Dimension(90, 60));
                    
                    JButton cell3 = new JButton("2");
                    cell3.setPreferredSize(new Dimension(90, 60));
                    
                    JButton cell4 = new JButton("3");
                    cell4.setPreferredSize(new Dimension(90, 60));
                    
                    JButton cell5 = new JButton("4");
                    cell5.setPreferredSize(new Dimension(90, 60));
                    
                    JButton cell6 = new JButton("5");
                    cell6.setPreferredSize(new Dimension(90, 60));
                    
                    JButton cell7 = new JButton("6");
                    cell7.setPreferredSize(new Dimension(90, 60));
                    
                    JButton cell8 = new JButton("7");
                    cell8.setPreferredSize(new Dimension(90, 60));
                    
                    JButton cell9 = new JButton("8");
                    cell9.setPreferredSize(new Dimension(90, 60));
                    
                    JButton cell10 = new JButton("9");
                    cell10.setPreferredSize(new Dimension(90, 60));
                    
                    JButton cell11 = new JButton("0");
                    cell11.setPreferredSize(new Dimension(90, 60));
                    
                    JButton cell12 = new JButton(".");
                    cell12.setPreferredSize(new Dimension(90, 60));
                    
                    JButton cell13 = new JButton("=");
                    cell13.setPreferredSize(new Dimension(90, 60));
                
                    JButton cell14 = new JButton("+");
                    cell14.setPreferredSize(new Dimension(90, 48));
                    
                    JButton cell15 = new JButton("-");
                    cell15.setPreferredSize(new Dimension(90, 48));
                    
                    JButton cell16 = new JButton("*");
                    cell16.setPreferredSize(new Dimension(90, 48));
                    
                    JButton cell17 = new JButton("/");
                    cell17.setPreferredSize(new Dimension(90, 48));
                    
                    JButton cell18 = new JButton("C");
                    cell18.setPreferredSize(new Dimension(90, 48));
                    
                    JPanel blank = new JPanel();
                    blank.setPreferredSize(new Dimension(90, 60));
                    
                    
                    //Le conteneur principal
                    JPanel content = new JPanel();
                    content.setPreferredSize(new Dimension(400, 220));
                    content.setBackground(Color.WHITE);
                    //On définit le layout manager
                    content.setLayout(new GridBagLayout());
                    
                    //L'objet servant à positionner les composants
                    GridBagConstraints gbc = new GridBagConstraints();
                		
                    //On positionne la case de départ du composant
                    gbc.gridx = 0;
                    gbc.gridy = 0;
                    //La taille en hauteur et en largeur
                    gbc.gridheight = 1;
                    gbc.gridwidth = 1;
                    //Celle-ci indique que la cellule se réplique de façon horizontale
                    gbc.fill = GridBagConstraints.HORIZONTAL;
                    gbc.gridwidth = GridBagConstraints.REMAINDER;
                    content.add(cell1, gbc);
                    //---------------------------------------------
                    
                    gbc.gridheight = 1;
                    gbc.gridwidth = 1;
                    
                    gbc.gridx = 0;
                    gbc.gridy = 1;
                    content.add(cell2, gbc);
                    //---------------------------------------------
                  
                    
                    gbc.gridx = 1;
                    gbc.gridy = 1;
                    content.add(cell3, gbc);
                
                    gbc.gridx = 2;
                    gbc.gridy = 1;
                    gbc.gridwidth = GridBagConstraints.REMAINDER;
                    content.add(cell4, gbc);
                    
                    gbc.gridheight = 1;
                    gbc.gridwidth = 1;
                    
                    gbc.gridx = 0;
                    gbc.gridy = 2;
                    content.add(cell5, gbc);
                    
                    gbc.gridx = 1;
                    gbc.gridy = 2;
                    content.add(cell6, gbc);
                    
                    gbc.gridx = 2;
                    gbc.gridy = 2;
                    gbc.gridwidth = GridBagConstraints.REMAINDER;
                    content.add(cell7, gbc);
                
                    gbc.gridheight = 1;
                    gbc.gridwidth = 1;
                    
                    gbc.gridx = 0;
                    gbc.gridy = 3;
                    content.add(cell8, gbc);
                    
                    gbc.gridx = 1;
                    gbc.gridy = 3;
                    content.add(cell9, gbc);
                    
                    gbc.gridx = 2;
                    gbc.gridy = 3;
                    gbc.gridwidth = GridBagConstraints.REMAINDER;
                    content.add(cell10, gbc);
                    
                    gbc.gridheight = 1;
                    gbc.gridwidth = 1;
                    
                    gbc.gridx = 0;
                    gbc.gridy = 4;
                    content.add(cell11, gbc);
                    
                    gbc.gridx = 1;
                    gbc.gridy = 4;
                    content.add(cell12, gbc);
                    
                    gbc.gridx = 2;
                    gbc.gridy = 4;
                    content.add(cell13, gbc);
                    
                    gbc.gridheight = 4/5;
                    gbc.gridwidth = 1;
                    
                    gbc.gridx = 3;
                    gbc.gridy = 1;
                    content.add(cell14, gbc);
                    
                    gbc.gridx = 3;
                    gbc.gridy = 2;
                    content.add(cell15, gbc);
                    
                    gbc.gridx = 3;
                    gbc.gridy = 3;
                    content.add(cell16, gbc);
                    
                    gbc.gridx = 3;
                    gbc.gridy = 4;
                    content.add(cell17, gbc);
                    
                    gbc.gridx = 3;
                    gbc.gridy = 5;
                    content.add(cell18, gbc);
                    
                    //On ajoute le conteneur
                    this.setContentPane(content);
                    this.setVisible(true);		
                  }
                



                • Partager sur Facebook
                • Partager sur Twitter
                "L'art est une arme" ~ Blue Stahli
                  24 mai 2016 à 15:13:50

                  Tu n'as pas bien lu (ou compris) mon message alors pour t'aider un peu, voici un nouveau dessin. :)

                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 mai 2016 à 13:40:23

                    Et là je comprends encore moins. x)

                    Vraiment cette calculatrice me tord le cerveau. Rien que graphiquement, mais aussi niveau logistique, ça va être un calvaire, rien que d'y penser j'en ai mal à la tête..

                    • Partager sur Facebook
                    • Partager sur Twitter
                    "L'art est une arme" ~ Blue Stahli
                      26 mai 2016 à 13:49:27

                      Salut,

                      J'ai personnellement trouvé le GroupLayout très clair et très efficace pour le placement, le tuto d'Oracle (https://docs.oracle.com/javase/tutorial/uiswing/layout/group.html) est plutôt facile à suivre (en anglais par contre), essaye de voir par là ;)

                      • Partager sur Facebook
                      • Partager sur Twitter
                        26 mai 2016 à 14:28:42

                        Pour le GridBagLayout, tu dois découper ton panel en grille. Ici, ça te donne 8 lignes et 4 colonnes.

                        On voit que chaque bouton tient dans une colonne. On aura donc gridwidth = 1 pour tous les boutons (valeur par défaut.

                        Par contre, certains boutons sont à cheval sur deux lignes, d'autres sur une seule. On doit donc préciser gridheight = 2 pour les boutons sur deux lignes et gridheight = 1 pour les autres.

                        Enfin, pour chaque bouton, tu dois préciser ses coordonnées de départ.

                        gridx = 0, gridy = 0 pour 1

                        gridx = 1, gridy = 0 pour 2

                        ...

                        gridx = 0, gridy = 2 pour 4

                        etc...

                        • Partager sur Facebook
                        • Partager sur Twitter
                          27 mai 2016 à 14:17:59

                          J'essaie ça, et je verrais ;).

                          Sinon après m'être torturer les méninges j'arrives presque au résultat voulu (Manque encore ce problème de hauteur) : http://i.imgur.com/iQDpCwi.png 

                          -
                          Edité par Shishigami Reishin 27 mai 2016 à 14:22:56

                          • Partager sur Facebook
                          • Partager sur Twitter
                          "L'art est une arme" ~ Blue Stahli
                            30 mai 2016 à 14:46:37

                            Up, toujours rien trouvé..

                            Pour tant j'y suis presque.

                            • Partager sur Facebook
                            • Partager sur Twitter
                            "L'art est une arme" ~ Blue Stahli
                              30 mai 2016 à 15:57:48

                              Bon, j'ai essayé avec un GridBagLayout et effectivement, c'est la grosse galère. Utilise plutôt deux GridLayout. Un pour le pavé numérique et un pour les opérations. Tu te simplifieras la vie.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                30 mai 2016 à 18:30:13

                                Ok, je vais faire comme ça alors. ^^
                                • Partager sur Facebook
                                • Partager sur Twitter
                                "L'art est une arme" ~ Blue Stahli

                                Aide GridBagLayout

                                × 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