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 :

GridBagLayout Vs. JComboBox


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 46
    Par défaut GridBagLayout Vs. JComboBox
    Bonjour à tous !

    Je me tourne vers vous car j'ai un problème avec un GridBagLayout.

    Ça fait maintenant plusieurs mois que j'utilise quasiment plus que ce layout, donc j'arrive maintenant à placer mes composants comme je le souhaite.
    Toujours ? Non pas vraiment, un composant résiste encore et toujours (depuis 3 jours en fait) à ce layout...

    J'ai essayé plein de choses différentes, d'enlever certains composants, de changer le composants qui pose problème, etc... Mais rien n'y fait.

    En fait ce que je veux faire se trouve dans la 2e pièce jointe "pnl_voulu".
    Un petit JPanel avec deux JButton en dessous valider, et annuler, mais c'est pas dans ce panel que j'ai un soucis.
    Donc dans ce JPanel, un voit que le menu déroulant (JComboBox) va de 0 à 2 sur l'axe des abscisses, les deux boutons de 2 à 3.
    Ensuite, le JLabel nom, de 0 à 1, et le JTextfield de 1 à 3.
    Etc... Idem pour les suivants.
    Les 2 boutons Enregistrer et Annuler ne sont pas sur le JPanel qui pose problème.

    Et en fait ce que j'obtiens, c'est la fenêtre de la 1e pièce jointe "pnl_gbc".

    Donc si quelqu'un pouvait m'aider, ça serait cool Même si vous pouviez juste tester le code, et me dire ce que vous obtenez...
    Parce que là, franchement, je galère et surtout, je ne comprends pas pourquoi ça ne marche pas !!

    Pour info, les résultats des sysout sont les suivants :
    on ajoute en position x = 0 y = 0 sur une largeur de 2
    on ajoute en position x = 2 y = 0 sur une largeur de 1
    on ajoute en position x = 0 y = 1 sur une largeur de 1
    on ajoute en position x = 1 y = 1 sur une largeur de 2
    on ajoute en position x = 0 y = 2 sur une largeur de 1
    on ajoute en position x = 1 y = 2 sur une largeur de 2
    on ajoute en position x = 0 y = 3 sur une largeur de 1
    on ajoute en position x = 1 y = 3 sur une largeur de 2
    on ajoute en position x = 0 y = 4 sur une largeur de 1
    on ajoute en position x = 1 y = 4 sur une largeur de 2
    Donc TOUT correspond...

    Voilà le code :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    public JDialogModifContact(JDialog owner, ArrayList<Contact> alContact) {
     
    		super(owner);
     
    		this.setLocationRelativeTo(null);
     
    		this.setTitle("Liste des contacts");
     
    		this.setIconImage(new ImageIcon(getClass().getResource("/images/contact.png")).getImage());
     
    		this.alConCree = alContact;
     
    		setLayout(new BorderLayout());
     
    		JPanel pnlHaut = new JPanel(new GridBagLayout());
     
    		GridBagConstraints gbc = new GridBagConstraints();
     
    		gbc.gridheight = 1;
    		gbc.gridwidth = 2;
    		gbc.gridx = 0;
    		gbc.gridy = 0;
    		gbc.fill = GridBagConstraints.HORIZONTAL;
    		gbc.insets = new Insets(5, 10, 5, 5);
     
    		if(alConCree.size() == 0)
    		{
    			comboListe.setEditable(true);
    			comboListe.setSelectedItem("Aucun contact enregistré");
    			comboListe.setEditable(false);
    		}
    		else
    		{
    			String[] tabCon = new String[alConCree.size()];
    			for(int c = 0 ; c < tabCon.length ; c++)
    				tabCon[c] = alConCree.get(c).getNom() + " " + alConCree.get(c).getPrenom();
    			comboListe = new JComboBox(tabCon);
    			comboListe.setModel(new DefaultComboBoxModel(tabCon));
    			//comboListe.revalidate();
    			//comboListe.repaint();
    		}
     
    		System.out.println("on ajoute en position x = " + gbc.gridx + " y = " + gbc.gridy + " sur une largeur de " + gbc.gridwidth);
    		pnlHaut.add(comboListe, gbc);
     
    		gbc.gridwidth = 1;
    		gbc.gridx+= 2;
     
    		JPanel pnlBtnSupEdt = new JPanel();
    		pnlBtnSupEdt.setLayout(new BoxLayout(pnlBtnSupEdt, BoxLayout.LINE_AXIS));
     
    		btnSupCon.setFocusPainted(false);/////////
    		btnSupCon.setBorderPainted(false);//////// tout ça permet de n'afficher 
    		btnSupCon.setOpaque(false);/////////////// que l'image sur le bouton
    		btnSupCon.setContentAreaFilled(false);////
    		btnSupCon.setToolTipText("Supprimer le contact sélectionné");
    		//btnSupCon.setPreferredSize(new Dimension(17, btnSupCon.getHeight()));
     
    		btnEdtCon.setFocusPainted(false);/////////
    		btnEdtCon.setBorderPainted(false);//////// tout ça permet de n'afficher 
    		btnEdtCon.setOpaque(false);/////////////// que l'image sur le bouton
    		btnEdtCon.setContentAreaFilled(false);////
    		btnEdtCon.setToolTipText("Modifier le contact sélectionné");
    		//btnEdtCon.setPreferredSize(new Dimension(17, btnEdtCon.getHeight()));
     
    		pnlBtnSupEdt.add(btnSupCon);
    		pnlBtnSupEdt.add(btnEdtCon);
    		System.out.println("on ajoute en position x = " + gbc.gridx + " y = " + gbc.gridy + " sur une largeur de " + gbc.gridwidth);
    		pnlHaut.add(pnlBtnSupEdt, gbc);
     
    		gbc.gridwidth = 1;
    		gbc.gridx = 0;
    		gbc.gridy++;
    		System.out.println("on ajoute en position x = " + gbc.gridx + " y = " + gbc.gridy + " sur une largeur de " + gbc.gridwidth);
    		pnlHaut.add(new JLabel("Nom"), gbc);
     
    		gbc.gridwidth = 2;
    		gbc.gridx++;
    		System.out.println("on ajoute en position x = " + gbc.gridx + " y = " + gbc.gridy + " sur une largeur de " + gbc.gridwidth);
    		pnlHaut.add(tfNom, gbc);
     
    		gbc.gridwidth = 1;
    		gbc.gridx = 0;
    		gbc.gridy++;
    		System.out.println("on ajoute en position x = " + gbc.gridx + " y = " + gbc.gridy + " sur une largeur de " + gbc.gridwidth);
    		pnlHaut.add(new JLabel("Prénom"), gbc);
     
    		gbc.gridwidth = 2;
    		gbc.gridx++;
    		System.out.println("on ajoute en position x = " + gbc.gridx + " y = " + gbc.gridy + " sur une largeur de " + gbc.gridwidth);
    		pnlHaut.add(tfPrenom, gbc);
     
    		gbc.gridwidth = 1;
    		gbc.gridx = 0;
    		gbc.gridy++;
    		System.out.println("on ajoute en position x = " + gbc.gridx + " y = " + gbc.gridy + " sur une largeur de " + gbc.gridwidth);
    		pnlHaut.add(new JLabel("Fonction"), gbc);
     
    		gbc.gridwidth = 2;
    		gbc.gridx++;
    		System.out.println("on ajoute en position x = " + gbc.gridx + " y = " + gbc.gridy + " sur une largeur de " + gbc.gridwidth);
    		pnlHaut.add(tfFct, gbc);
     
    		gbc.gridwidth = 1;
    		gbc.gridx = 0;
    		gbc.gridy++;
    		System.out.println("on ajoute en position x = " + gbc.gridx + " y = " + gbc.gridy + " sur une largeur de " + gbc.gridwidth);
    		pnlHaut.add(new JLabel("Téléphone"), gbc);
     
    		gbc.gridwidth = 2;
    		gbc.gridx++;
    		System.out.println("on ajoute en position x = " + gbc.gridx + " y = " + gbc.gridy + " sur une largeur de " + gbc.gridwidth);
    		pnlHaut.add(tfTel, gbc);
     
    		JPanel pnlBtn = new JPanel();
     
    		pnlBtn.setLayout(new BoxLayout(pnlBtn, BoxLayout.LINE_AXIS));
     
    		pnlBtn.add(Box.createHorizontalGlue());
    		btnEdtSav.setEnabled(false);
    		pnlBtn.add(btnEdtSav);
    		pnlBtn.add(Box.createRigidArea(new Dimension(10, 0)));
    		pnlBtn.add(btnCloAnn);
    		pnlBtn.add(Box.createRigidArea(new Dimension(10, 0)));
     
    		this.add(pnlHaut, BorderLayout.NORTH);
    		this.add(pnlBtn, BorderLayout.CENTER);
     
    		this.addWindowListener(this);
     
    		this.pack();
     
    		this.setResizable(false);
     
    		this.setVisible(true);
    	}
    Merci déjà d'être arrivé jusque là !
    Et j'espère que quelqu'un pourra m'aider...

    Merci d'avance

    EDIT :
    Je viens de me rendre compte que, dans le code, quand on utilise ce constructeur en lui passant un ArrayList, et bien, le code fonctionne

    Alors pourquoi quand il fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if(alConCree.size() == 0)
    		{
    			//...
    		}
    		else//LA CA FONCTIONNE !
    		{
    			String[] tabCon = new String[alConCree.size()];
    			for(int c = 0 ; c < tabCon.length ; c++)
    				tabCon[c] = alConCree.get(c).getNom() + " " + alConCree.get(c).getPrenom();
    			comboListe = new JComboBox(tabCon);
    			comboListe.setModel(new DefaultComboBoxModel(tabCon));
    			//comboListe.revalidate();
    			//comboListe.repaint();
    		}
    ça fonctionne, tandis que quand il fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if(alConCree.size() == 0)//LA CA FONCTIONNE PAS
    		{
    			comboListe.setEditable(true);
    			comboListe.setSelectedItem("Aucun contact enregistré");
    			comboListe.setEditable(false);
    		}
    		else
    		{
    			//...
    		}
    ça ne fonctionne pas ?? Alors que la variable GridBagConstaints n'intervient pas ?
    Images attachées Images attachées   

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 46
    Par défaut
    OK, ça se précise, en fait, quand je remplis le JComboBox, ce dernier se redimensionne en fonction de ce qu'il y a dedans. Càd, quand je l'initialise avec personne dedans et que je fais juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    comboListe.setEditable(true);
    comboListe.setSelectedItem("Aucun contact enregistré");
    comboListe.setEditable(false);
    et bien le composant ne se redimensionne pas selon la largeur de la chaîne de caractère "Aucun contact enregistré".
    Pour résoudre ça , j'ai simplement effectué cette modification :
    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
    gbc.gridheight = 1;
    		gbc.gridwidth = 2;
    		gbc.gridx = 0;
    		gbc.gridy = 0;
    		gbc.fill = GridBagConstraints.HORIZONTAL;
    		gbc.insets = new Insets(5, 10, 5, 5);
     
    		if(alConCree.size() == 0)
    		{
    			comboListe.setEditable(true);
    			comboListe.setSelectedItem("Aucun contact enregistré");
    			comboListe.setEditable(false);
    		}
    		else
    		{
    			String[] tabCon = new String[alConCree.size()];
    			for(int c = 0 ; c < tabCon.length ; c++)
    				tabCon[c] = alConCree.get(c).getNom() + " " + alConCree.get(c).getPrenom();
    			comboListe = new JComboBox(tabCon);
    			comboListe.setModel(new DefaultComboBoxModel(tabCon));
    			//comboListe.revalidate();
    			//comboListe.repaint();
    		}
    		comboListe.setPreferredSize(new Dimension(160, 21));//cette ligne
     
    		pnlHaut.add(comboListe, gbc);
    Voilà, voilà...

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

Discussions similaires

  1. [JComboBox] Mmise à jour contenu
    Par java_math dans le forum Composants
    Réponses: 4
    Dernier message: 16/07/2008, 18h27
  2. JComboBox action
    Par calypso dans le forum Composants
    Réponses: 4
    Dernier message: 02/08/2004, 15h41
  3. [jcombobox]l'élément affiché lié à un autre objet
    Par szdavid dans le forum Composants
    Réponses: 3
    Dernier message: 11/05/2004, 10h17
  4. [swing][JComboBox]Problème de taille
    Par n!co dans le forum Composants
    Réponses: 8
    Dernier message: 06/03/2004, 10h53
  5. Couleur d'une JComboBox disabled
    Par ced dans le forum Composants
    Réponses: 6
    Dernier message: 06/01/2004, 15h33

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