Bonjour,
J'ai crée un JPanel qui utilise un GridBagLayout.
J'ajoute mes différents composants dans ce panel mais un JButton n'apparait pas.
Voici mon code :
Mon problème est que mon 'btnFile' ne se montre pas.. J'ai bien mon 'header' sur une première ligne ensuite 'lblFile' et 'fldFile' mais 'btnFile' n'est pas la...
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 public TemplatePane(RepportsTemplateBean template) { this.template = template; // Building components header = new HeaderPanel("Edition d'un template"); lblFile = new JLabel("l_File"); fldFile = new JTextField(); btnFile = new JButton("b_Select"); lblDataSources = new JLabel("l_Datasources"); tblDataSources = new JTable(); lblOptions = new JLabel("l_Options"); tblOptions = new JTable(); lblName = new JLabel("l_name"); fldName = new JTextField(); lblDescription = new JLabel("l_Description"); txtDescription = new JTextArea(); lblDocuments = new JLabel("l_Documents"); lstDocuments = new JList(); lblSubReports = new JLabel("l_Subreports"); lstSubreports = new JList(); // Adding components to layout layout = new GridBagLayout(); GridBagConstraints cons = new GridBagConstraints(); setLayout(layout); // Heading cons.fill = GridBagConstraints.HORIZONTAL; cons.weightx = 3.0; cons.gridwidth = GridBagConstraints.REMAINDER; add(header, cons); // File selection cons.gridwidth = GridBagConstraints.RELATIVE; cons.fill = GridBagConstraints.HORIZONTAL; cons.anchor = GridBagConstraints.LINE_END; cons.weightx = 0.0; add(lblFile, cons); cons.anchor = GridBagConstraints.CENTER; cons.weightx = 1.0; add(fldFile, cons); cons.weightx = 0.0; cons.fill = GridBagConstraints.NONE; cons.gridwidth = GridBagConstraints.REMAINDER; add(btnFile, cons); setLayout(layout); } private void add(JComponent comp, GridBagConstraints cons) { layout.setConstraints(comp, cons); super.add(comp); }
Je n'ai jamais utilisé GridBagLayout autrement qu'avec un GUIBuilder mais cette fois je ne peux pas et dans le fond c'est une bonne chose puisque je suis bloqué sur ce petit truc.
Merci
Edit 1 : Il semble que le problème vienne de la ligne cons.gridwidth=GridBagConstraints.RELATIVE. Si je commente les lignes relatives au 'header' et celle-ci dessus, tout se passe bien...
Mais pourquoi est-ce que je ne peux pas remettre en RELATIVE après un REMAINDER ?
Edit 2 : Si je réinstancie un 'GridBagConstraints' après la code relatif au 'header' et que je supprimer la ligne qui met le gridwidth a RELATIVE. Tout fonctionne bien.
C'est donc vraiment le fait de mettre le gridwidth en REMAINDER et ensuite en RELATIVE qui pose problème. Mais je ne sais toujours pas pourquoi..
Partager