Et dans la deuxième colonne de ton image, tu y mets autre chose ?
La partie droite de la fenêtre, pas besoin de s'en occuper. Elle est déjà créée.
La partie gauche c'est un conteneur. Et la droite aussi mais pas besoin de s'en occuper.
Tu as commencé à écrire du code, ou tu veux qu'on te ponde tout ?
Ben j'ai fais une boucle qui crée les JLabel et JTextField, mais après je ne sais pas comment les gérer avec le GridBagLayout .
Mais voici la boucle :
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 private JPanel createLabelField(JPanel panel){ //contraintes du layout GridBagConstraints c = new GridBagConstraints(); //ajout des labels "headers" panel.add(new JLabel("Noms")); panel.add(new JLabel("Notes")); //création des tableau de label et jtf JLabel labels[] = new JLabel[noms.size()]; JTextField jtf[] = new JTextField[noms.size()]; //boucle de création des labels et jtf en fonction du nombre d'élèves for(int i = 0; i< noms.size();i++){ String nom = (String) noms.get(i); Dimension dim = new Dimension(150,20); labels[i] = new JLabel(nom); labels[i].setMaximumSize(dim); jtf[i] = new JTextField(); jtf[i].setMaximumSize(dim); panel.add(labels[i],c); panel.add(jtf[i],c); } return panel; }
Alors, pourriez vous m'aider ? C'est juste pour les contraintes, pour que mes JLabel et JTF se placent correctement.
C'est ça que tu veux ?
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 package test; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.SwingUtilities; public class Test extends JFrame { public void initAndDisplay() { GridBagLayout gbl = new GridBagLayout(); GridBagConstraints gbc = new GridBagConstraints(0, 0, 1, 1, 0, 0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 0, 0); for (int i = 0; i < 10; i++) { JLabel label = new JLabel("Label " + i); label.setPreferredSize(new Dimension(75, 20)); gbc.gridx = 0; gbc.gridy = i; gbl.setConstraints(label, gbc); this.add(label); JTextField texte = new JTextField("Texte " + i); texte.setPreferredSize(new Dimension(150, 20)); gbc.gridx = 1; gbl.setConstraints(texte, gbc); this.add(texte); } this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setTitle("Test"); this.setLayout(gbl); this.pack(); this.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { Test fenetre = new Test(); fenetre.initAndDisplay(); } }); } }
Salut,
je me permets de m'incruster sur ce topic, en effet, je decouvre le GridBagLayout moi aussi et j'essaye de refaire la disposition que tu souhaites.
les differences:
Je ne passe pas par une boucle pour creer mes JLabel et JTextField,
je prefere tout coder pas à pas au début, histoire ce que soit plus simple a comprendre par la suite
Voici la description:
une JFrame avec un BorderLayout et 2 JPanel (WEST et EAST)
dans le JPanel WEST,
Ligne 1:
un titre= JLabel
Ligne 2:
une requete (inserez votre nom)= JLabel
un JTextField
Ligne 3:
une requete (inserez votre prenom)= JLabel
un JTextField
Ligne 4:
une requete (inserez votre age)= JLabel
un JTextField
Ligne 5:
3 boutons: valider, effacer, fermer
Voici le code, j'ai fait
la JFrame, son BorderLayout, ses 2 JPanel,
je commence a placer mes composants dans le JPanel WEST mais y'a deja un probleme lorsque j'affiche mon second composant qui vient se coller au 1°
Voilà, je declare et definis toutes les contraintes pour chaque composant, histoire de savoir ce que je fais.
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 import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel; import java.awt.BorderLayout; import java.awt.GridBagLayout; import java.awt.GridBagConstraints; import java.awt.Insets; import java.awt.Color; import java.awt.Dimension; public class WinGridBagLayout02 extends JFrame { // objets crees/importes JPanel panContainer= new JPanel(); JPanel panEast= new JPanel(); JPanel panWest= new JPanel(); GridBagLayout gblPanWest= new GridBagLayout(); GridBagConstraints gbcPW= new GridBagConstraints(); GridBagLayout gblPanEast= new GridBagLayout(); GridBagConstraints gbcPE= new GridBagConstraints(); JLabel lblPWTitre= new JLabel("Voici le titre du panWest de cette fenetre"); JLabel lblPWNom= new JLabel("Votre nom"); // variables // constructeur WinGridBagLayout02() { this.setSize(1000, 400); this.setTitle("utilisation d'un GridBagLayout"); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.setResizable(true); //-------------------------------------------------------------------------------------------------------- this.setContentPane(panContainer); this.setLayout(new BorderLayout()); this.getContentPane().add(panEast, BorderLayout.EAST); this.getContentPane().add(panWest, BorderLayout.WEST); this.panEast.setBackground(Color.black); this.panWest.setBackground(Color.white); /* // A quoi ca sert? this.panEast.setSize(this.getWidth()/ 2, this.getHeight()); this.panWest.setSize(this.getWidth()/ 2, this.getHeight()); //*/ this.panEast.setPreferredSize(new Dimension(this.getWidth()/ 2, this.getHeight())); this.panWest.setPreferredSize(new Dimension(this.getWidth()/ 2, this.getHeight())); //-------------------------------------------------------------------------------------------------------- /* * fait planter l'appli s'il est mis a cet endroit * on peut le placer juste avt l'instruction this.setVisible(true); ms le resultat est different * peut on attribuer un GBL à un JPanel ? * ***** this.panWest.setLayout(gblPanWest); ***** ECRIT A LA FIN COMME INDIQUE */ //** contraintes pour le 1° JLabel de panWest: apparait seul sur la seconde ligne gbcPW.gridx= 0; gbcPW.gridy= 1; // 2° ligne gbcPW.gridwidth= GridBagConstraints.REMAINDER; // le JLabel est le dernier de la ligne gbcPW.gridheight= 1; gbcPW.anchor= GridBagConstraints.CENTER; gbcPW.insets= new Insets(10, 10, 10, 10); // def des marges haute, gauche, basse, droite gbcPW.ipadx= 0; gbcPW.ipady= 0; gbcPW.weightx= 100; gbcPW.weighty= 100; gbcPW.fill= GridBagConstraints.NONE; // interdire le redimensionnement this.panWest.add(lblPWTitre, gbcPW); // ajouter le JLabel au panWest par le biais de la contrainte gbcPW //** contraintes pour le 2° JLabel de panWest: apparait en 1° sur la 3° ligne gbcPW.gridx= 0; gbcPW.gridy= 2; gbcPW.gridwidth= 1; gbcPW.gridheight= 1; gbcPW.anchor= GridBagConstraints.LINE_START; gbcPW.insets= new Insets(10, 10, 10, 10); gbcPW.ipadx= 0; gbcPW.ipady= 0; gbcPW.weightx= 100; gbcPW.weighty= 100; gbcPW.fill= GridBagConstraints.NONE; this.panWest.add(lblPWNom, gbcPW); //-------------------------------------------------------------------------------------------------------- this.panWest.setLayout(gblPanWest); this.pack(); this.setVisible(true); } // getters // setters // methodes de classe }
le JPanel EAST aura des JLabel qui afficheront les valeurs que j'aurai rentré.
Si tu (vous), fr1man, as (avez) l'explication (pas le code), je prends.
Merci
a+
areuh
HOP!!!!
j'ai trouvé!!!!
mon:
this.panWest.setLayout(gblPanWest);
etait déclaré trop bas dans le constructeur, en fait faut le placer avant de s'attaquer aux attributs des 2 JPanel.
ok c'est tout bon pour moi, mais comme j'aurai d'autres problemes, je reviendrai poster ici meme... a moins qu'un gentil modo ou le proprio de ce post ne me demande d'en ouvrir 1 spécifique.
a+
areuh
re,
Au fait,
cette adresse (que j'aimerai qu'on m'explique ce que c'est por favor)
http://bbclone.developpez.com/fr/jav...?page=sommaire
donne une super explication.
a+
areuh
Partager