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

AWT/Swing Java Discussion :

Les dimensions de composants dans une grille


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Par défaut Les dimensions de composants dans une grille
    Bonjour,

    Je vais de problème en problème avec les layout. Je cherche à positionner 3 composants (un JTextField, un JComboBox et un JScroolPane avec à l'interieur une JList) de manière à ce qu'il soit l'un en dessous de l'autre (une colone 3 rangée quoi)

    Alors j'essaye avec un BorderLayout (North,Center et South) mais le problème c'est que le composant centrale est redimensionné et 5 fois trop haut. Avec GridLayout mais la hauteur de tous les composants est la même.

    Ce que j'aimerais bien sûr c'est que les largeurs des composants soit à celle de la fenêtre, les hauteurs des 2 premiers soient les hauteurs par défaut et la hauteur du JScroolPane soit adaptée en fonction de se qui reste de la fenêtre.

    Alors j'ai ensuite essayé avec un GridBagLayout, mais les largeurs sont minimales et les hauteurs c'est un peu folklorique. Enfin avec les 2 premiers layout en donnant une taille définie aux composants mais là les largeurs s'adaptent pas à la fenêtre.

    Bref c'est n'importe quoi, quelqu'un pourrait-il me dire comment résoudre ce problème (genre comment faire pour dire à un composant de l'allonger jusqu'à la fin ou de prendre la largeur de la fenêtre ou celle de défaut) ?

    Merci d'avance

  2. #2
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Avec un gridBagLayout tu peux faire ça.
    Regarde la propriété fill

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Avec ces Layouts ces comportements sont normal. Pour positionner les composants le choix du layout est très important. Viens ensuite les dimension min/max/préféré des composants (selon le layout).

    Dans ton cas précis, le BoxLayout me semble amplement suffisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    		JTextField textField = new JTextField();
    		JComboBox comboBox = new JComboBox();
    		JScrollPane scrollList = new JScrollPane(new JList(new String[]{"a", "b", "c"}));
     
    		JPanel panel = new JPanel();
    		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
     
    		panel.add(textField);
    		panel.add(comboBox);
    		panel.add(scrollList);
     
    		JOptionPane.showMessageDialog(null, panel);
    Maintenant tu peux aussi te tourner vers des layout non-standard comme TableLayout qui permettent des choses plus poussées...

    a++

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Par défaut
    Le problème de BoxLayout est que le JTextField est redimensionné en hauteur de manière bien excessive

    J'ai essayé le GridBagLayout mais cela ne donne pas le résultat voulu. Les largeurs sont fixes de même que les hauteurs qui semblent être celles pas defaut
    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
    17
    18
    19
    20
    21
    22
     
    	static GridBagConstraints contraintePleine(int gx,int gy,int gw,int gh)
    	{
    		GridBagConstraints contr=new GridBagConstraints();
    		contr.gridx=gx;
    		contr.gridy=gy;
    		contr.gridheight=gh;
    		contr.gridwidth=gw;
    		contr.anchor=GridBagConstraints.NORTHWEST;
    		contr.fill=GridBagConstraints.BOTH;
     
    		return contr;
    	}
    ....
    GridBagLayout gb=new GridBagLayout();
    panel.setLayout(gb);
    		gb.setConstraints(textField, contraintePleine(0, 0, 1, 1));
    		gb.setConstraints(comboBox, contraintePleine(0, 1, 1, 1));
    		gb.setConstraints(scrollList, contraintePleine(0, 2, 1, 1));
    		panel.add(textField);
    		panel.add(comboBox);
    		panel.add(scrollList);

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Par défaut
    En fait le boxlayout ajuste la taille du 1er composant mais prend celle par défaut pour les suivants. On doit pouvoir lui dire d'ajuster la taille du dernier et pas du premier mais comment faire ?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Par défaut
    Pour ceux qui cherche le truc c'était de mettre
    scroolPane.setPreferredSize(new Dimension(250, 4000000));

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/07/2010, 18h16
  2. Conserver les noeuds ouverts dans une grille
    Par ghotique dans le forum Flex
    Réponses: 4
    Dernier message: 03/12/2009, 13h05
  3. [MySQL] récupérer les dimensions des images dans une boucle while
    Par Navyel dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/08/2007, 11h09
  4. [SWT] centrer les composants dans une vue
    Par LoloBebop dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 07/06/2006, 10h34
  5. Réponses: 10
    Dernier message: 19/09/2005, 22h24

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