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 :

[Layout] Comment faire un truc tout simple?


Sujet :

AWT/Swing Java

  1. #1
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut [Layout] Comment faire un truc tout simple?
    Salut,

    Je me rends compte que je suis toujours confronté au même problème en créant des interfaces graphiques...
    Pour c'est un truc tout simple, par exemple:
    [un_label] [un_text_field] [un_button]

    Je veux que le label et que le bouton gardent leur taille et que le textfield s'étire HORIZONTALEMENT seulement.
    Le problème, c'est que si je mets le textfield dans un BorderLayout, il n'a pas sa hauteur préférée (il est étiré à la fois en hauteur et en largeur), si je le mets dans un FlowLayout ou BoxLayout, il n'est pas étiré en largeur...

    Y'a-t-il moyen de faire ça proprement avec les layouts "de base"...?

    Sinon je vais utiliser GroupLayout, mais bon ça voudrait dire qu'avant java 6 on ne pouvait pas faire ça proprement...?
    EDIT: d'ailleurs même avec GroupLayout, je n'arrive pas à ce que le textfield ne s'étire que horizontalement...

  2. #2
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Tu dois pouvoir faire ça sans trop de problèmes avec un GridBagLayout.

  3. #3
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par wichtounet
    Tu dois pouvoir faire ça sans trop de problèmes avec un GridBagLayout.
    Un GridBag, c'est simplement un Grid plus complexe, et là il n'y a aucune structure de grille (aucune relation entre la taille des 3 composants que je veux mettre)...

  4. #4
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    J'ai même essayé d'"écraser" le textfield avec des glues pour qu'il ne s'agrandisse pas en hauteur, ça ne marche même pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    JPanel textFieldPane = new JPanel();
    textFieldPane.setLayout(new BoxLayout(textFieldPane,BoxLayout.Y_AXIS));
    JTextField text = new JTextField();
    textFieldPane.add(Box.createVerticalGlue());
    textFieldPane.add(text);
    textFieldPane.add(Box.createVerticalGlue());

  5. #5
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Tu peux quand même faire quelque chose avec le GridBagLayout :

    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
    23
    24
    25
    26
    27
    JPanel content = new JPanel();
     
    content.setLayout(new GridBagLayout());
     
    GridBagConstraints constraints = new GridBagConstraints();
     
    constraints.gridy = 0;
    constraints.weightx = 0;
    constraints.anchor = GridBagConstraints.BASELINE;
    constraints.fill = GridBagConstraints.NONE;
    constraints.insets = new Insets(5,5,5,5);
     
    constraints.gridx = 0;
     
    content.add(new JLabel("Label"), constraints);
     
    constraints.gridx = 1;
    constraints.weightx = 1;
    constraints.fill = GridBagConstraints.HORIZONTAL;
     
    content.add(new JTextField("Field"), constraints);
     
    constraints.gridx = 2;
    constraints.weightx = 0;
    constraints.fill = GridBagConstraints.NONE;
     
    content.add(new JButton("Button"), constraints);
    Par contre avec ça, tes composants seront au milieu de l'espace disponible. Si tu veux les laisser en haut, tu peux jouer avec une Glue, il te suffit de rajouter quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    constraints.gridy = 1;
    constraints.gridx = 0;
    constraints.gridwidth = 3;
    constraints.weighty = 1;
    constraints.fill = GridBagConstraints.BOTH;
     
    content.add(Box.createGlue(), constraints);
    Fais pas trop attention au code, j'ai pas codé très proprement

  6. #6
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Bon, j'ai finalement trouvé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	public FilePane() {
    		setLayout(new BoxLayout(this,BoxLayout.X_AXIS));
     
    		JLabel label = new JLabel("File : ");
    		JTextField text = new JTextField();
    		Dimension preferred = text.getPreferredSize();
    		text.setMaximumSize(new Dimension(Integer.MAX_VALUE,preferred.height));
    		JButton button = new JButton("...");
     
    		add(label);
    		add(text);
    		add(button);
    	}
    C'est complètement stupide d'avoir mis une taille maximum infinie en hauteur par défaut sur un JTextField : de toute façon un text field ça n'a qu'une seule ligne. Pourtant sur le JButton, la taille maximum est bien définie correctement...

  7. #7
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    OK, merci witch, c'est un peu compliqué (mais ça marche à peu près)

    Mais bon, s'il faut le faire à chaque textfield
    (car pour moi la taille maximale infinie en hauteur est un bug, donc à chaque fois qu'on crée un textfield, il faut la changer...)

  8. #8
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par ®om
    OK, merci witch, c'est un peu compliqué (mais ça marche à peu près)
    C'est vrai que c'est un peu lourd pour un petit truc. Sinon, pourquoi à peu près ?

    Citation Envoyé par ®om
    Mais bon, s'il faut le faire à chaque textfield
    (car pour moi la taille maximale infinie est un bug, donc à chaque fois qu'on crée un textfield, il faut la changer...)
    En effet.

  9. #9
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par wichtounet
    C'est vrai que c'est un peu lourd pour un petit truc. Sinon, pourquoi à peu près ?
    Les gaps sont un peu grands...

  10. #10
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par ®om
    Les gaps sont un peu grands...
    Ah... tu pinailles... Tu peux les modifier directement dans le code

Discussions similaires

  1. [MySQL] Comment faire un graphique tout simple avec Bdd Sql ?
    Par Debutant10 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 12/05/2012, 19h28
  2. Comment faire un tableau tout simple dans un état
    Par robertetgorgette dans le forum Access
    Réponses: 1
    Dernier message: 25/07/2006, 15h20
  3. [Struts layout] comment faire un ascenseur dans un tableau
    Par chouchou93 dans le forum Struts 1
    Réponses: 4
    Dernier message: 21/02/2006, 09h08
  4. Réponses: 1
    Dernier message: 19/02/2006, 19h52
  5. Petit truc tout simple que je comprend pas
    Par Olaf MENJI dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 29/11/2005, 16h56

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