Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme GridLayout

Sujet résolu
    17 mars 2010 à 15:59:53

    Salut tout le monde !

    Bon je m'excuse a l'avance parceque c'est surement un sujet reccurent mais malgre mes recherches j'ai pas trouve la solution a mon probleme :(

    En gros jai fait une classe fenetre perso, une class panel perso avec des boutons dedans et tout le tralala que j'organise avec un gridlayout.
    Probleme: les bouton et les textfield prennent toute la place de ma fenetre :( Alors que quand je change de layout, par exemple avec FlowLayout,
    la ils sont petits et tout sage..!


    bref le code vaut mieux que des discutions...

    fenetre.java
    public class fenetre extends JFrame{
    	
    	private panChooseFile pcf;
    	
    	fenetre()
    	{
    		this.setTitle("Project Reed Solomon - N & N 's");
    		this.setResizable(true);
    		this.setSize(800,500);
    		this.setLocationRelativeTo(null);
    		pcf = new panChooseFile();
    		pcf.setPreferredSize(new Dimension(this.getX(), (int)(this.getY()/3)));
    		this.setContentPane(pcf);
    		this.setVisible(true);
    	}
    	
    }
    

    panChooseFile.java
    public class panChooseFile extends JPanel {
    	
    	private JButton but1 = new JButton("Parcourir");
    	private JFileChooser fc = new JFileChooser();
    	private String pathFile = new String();
    	private String nameFile = new String();
    	private JTextField tfield1 = new JTextField("Cliquez sur parcourir");
    	private JTextField tfield2 = new JTextField("Fichier destination");
    	private GridLayout gl = new GridLayout(0,2);
    	
    	private class clickListener implements ActionListener
    	{
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			
    			if( e.getSource() == but1)
    			{
    				int val = fc.showOpenDialog(panChooseFile.this);
    				
    				if(val == JFileChooser.APPROVE_OPTION)
    				{
    					pathFile = fc.getSelectedFile().getAbsolutePath();
    					nameFile = fc.getSelectedFile().getName();
    				}
    				
    			}
    		}
    	}
    	
    	panChooseFile()
    	{
    		
    		//ajout des boutons aevc le gridlayout
    		this.setLayout(gl);
    		
    		tfield1.setDragEnabled(true);
    		tfield1.setPreferredSize(new Dimension(500,150));
    		this.add(tfield1);
    		
    		but1.addActionListener(new clickListener());
    		but1.setPreferredSize(new Dimension(300,150));
    		this.add(but1);
    		
    		tfield2.setDragEnabled(true);
    		tfield2.setPreferredSize(new Dimension(500,150));
    		this.add(tfield2);
    		
    	}
    	
    }
    


    Merci d'avance !!

    Nico

    Ps: je vous ai enleve tous les imports mais ils sont bien la :=)
    • Partager sur Facebook
    • Partager sur Twitter
      17 mars 2010 à 18:37:14

      Bon alors je n'ai rien lu du tout mais le GridLayout ne permet pas de définir la taille des composants, par définition de celui-ci. Par contre, ce qu'il peut être bon de faire, c'est de jouer avec setPreferredSize() et setMaximumSize() du JPanel (et pas des composants qui iront dedans).
      • Partager sur Facebook
      • Partager sur Twitter
        20 mars 2010 à 15:16:42

        J'ai essaye, j'ai enleve tous les modifications de la tailles des composants, et j'ai mis preferedsize et maximumsize, dans le constructeur du panel, ou dans celui de la fenetre mais rien a y faire, mes boutons et txtfield prennent toute la place encore ...
        J'ai aussi essaye avec un boxLayout mais rien a y faire ...
        Ca doit etre juste un truc tout bete je suis sur :/

        Si quelqu'un a une idee ...!!

        Merci d'avance et aussi pr ta reponse !

        Nico
        • Partager sur Facebook
        • Partager sur Twitter
          20 mars 2010 à 15:44:52

          salut, moi je pense (mais je suis pas un spécialiste), qu'un gridlayout c'est plutot fait pour creer l'ossature de la fenetre de maniere a ce qu'elle s'adapte bien aux differente résolution d'ecran.
          d'apres moi chaques sections de ton gridlayout devrais accueillir d'autre jpanel avec les elements positionné avec un flowlayout ou des setbounds.
          • Partager sur Facebook
          • Partager sur Twitter
            20 mars 2010 à 16:00:46

            Teste et ... change rien au pb :s ca me met des textfields et des boutons a la bonne taille du moins ! c'est deja ca :D mais voila j'ai crée un gridlayout(0,1) et a l'interieur j'ai mis 2panels avec mes composants en flowLayout comme ce que tu as dit .
            donc j'ai mes 2 panels mais ils prennent toute la place encore c'est a dire que j'ai ma premiere ligne de bouton et txtfield, et 200-300 pixels plus bas j'ai ma 2ieme ligne de bouton et txt field ... :/

            • Partager sur Facebook
            • Partager sur Twitter
              20 mars 2010 à 16:21:28

              honnetement j'ai du mal a visualiser!!! Je sais que moi tous ça, ça m'a bien fait galerer au debut, et toujours aujourd'hui, peut etre faut il trouver une meilleur structure de ton gridlayout au niveau des parametres, car avec les parametre que tu as mis sur ton gridlayout celui-ci n'a qu'une seul section or si tu as deux panel tu devrais avoir deux section dans ton gridlayout. en fait tu voudrais tous sur la même ligne? Si franchament ta pas de meilleur réponses poste ton code actuelle et j'essayerais dans mon IDE.
              • Partager sur Facebook
              • Partager sur Twitter
                20 mars 2010 à 16:45:46

                Fais un dessin ou un schéma de ce que tu veux, ou exprime-toi mieux.
                Swing c'est un jeu de briques, tu places tes composants dans un conteneur, les Layout sont là pour garder une relation entre les composants rien de plus.
                • Partager sur Facebook
                • Partager sur Twitter
                  20 mars 2010 à 17:38:56

                  Ok ok ...

                  Je vous fais le shema de ce que je voudrais en fait :
                  Image utilisateur

                  Ce que j'aurais voulu c'est que tous ces panels soient des panels perso.
                  Mais bon la je l'ai refais tout dans la classe fenetre et ca me fait un truc potable donc bon je vais oublier la modularisation (c'est pr un projet pr mon ecole je voulais faire ca bien comme il faut mais c'est pas grave.)

                  Bref mais au cas ou si vous trouvez pourquoi, sait on jamais !
                  Merci encore de vos reponses en tout cas !!

                  Nico
                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 mars 2010 à 18:25:54

                    Bon tu crées 3 JPanels et tu les remplies par tes composants (ou crées des instances de tes classes personnalisés)
                    Après tu mets les JPanel dans le JFrame en utilisant un BorderLayout( ou BoxLayout ou FlowLayout)
                    J'ai obtenu ceci vite fait, ce n'est pas difficile mais il faut juste pratiquer

                    Image utilisateur

                    Est-ce le résultat voulu ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 mars 2010 à 18:46:25

                      bah j'ai reussi a avoir la meme chose !! mais ... ne trouves tu pas ca moche?? les espaces entre les panels?? c'est ca qui me derange :D
                      • Partager sur Facebook
                      • Partager sur Twitter
                        20 mars 2010 à 18:48:50

                        il y a les méthodes setHGap() et setVGap() du layout pour changer l'espacement horizontal/vertical
                        • Partager sur Facebook
                        • Partager sur Twitter
                          21 mars 2010 à 17:40:38

                          J'ai teste mais meme quand je met setVgap(0), il reste au moins 50-100px de difference !! et si je met un nombre negatif, bah le jpanel du dessous ne se voit plus !!
                          Je crois que c'est encore une histoire de layout parceque j'ai beau essaye tous les preferredSize() et maximumSize(), rien ne marche ...

                          EDIT : la methode pack() de la JFrame fait tout beau tout propre je l'avais oubliee celle la !!!!
                          DONC pour ceux qui auront le mm probleme, faut utiliser la methode pack() a la fin, quand vous avez ajoute tout vos composants!

                          Merci encore a tous !!!
                          • Partager sur Facebook
                          • Partager sur Twitter
                            21 mars 2010 à 17:50:18

                            contentPane de la JFrame avec GridLayout
                            trois JPanel persos dans le contentPane
                            ces trois JPanels auront un FlowLayout par exemple pour disposer les Component à l'intérieur

                            Je suis quasi sûr que FlowLayout prend en compte les preferredSize.
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Probleme GridLayout

                            × 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