Bonjour à tous !
voilà mon soucis :
Dans un JPanel, j'ai 5 JButton différents : ajout, suppression, édition, valider et annuler, ainsi qu'un JTextfield.
Dans un autre j'ai un JList.
Au départ, il n'y a que les 3 premiers qui sont visibles (cf. 1e pièce jointe) et lorsque l'on va cliquer sur ajouter, ou éditer, ces 3 JButton vont disparaître pour laisser la place aux 2 autres (cf. 2e pièce jointe). Il sont donc au même endroit (dans le layout) et voici comment ils sont construits :
les listener sont ajoutés plus loin dans le code, pas de problème là-dessus, les actions s'effectuent :
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 JPanel pnlDTravaux = new JPanel(); pnlDTravaux.setLayout(new GridBagLayout()); gbc.gridheight = 1;//gbc est de type GridBagConstraints gbc.gridwidth = 3; gbc.gridx = 0; gbc.gridy = 0; gbc.fill = GridBagConstraints.BOTH; gbc.insets = new Insets(2, 2, 3, 2); JPanel pnlBtn13 = new JPanel(); pnlBtn13.setLayout(new GridLayout(1, 3, 5, 0)); pnlBtn13.add(btnPlusTravaux); btnPlusTravaux.setToolTipText("Ajouter un nouveau type de travaux"); pnlBtn13.add(btnMoinsTravaux); btnMoinsTravaux.setToolTipText("Supprimer le type de travaux sélectionné"); pnlBtn13.add(btnEditTravaux); btnEditTravaux.setToolTipText("Modifier les informations"); pnlDTravaux.add(pnlBtn13, gbc); JPanel pnlBtn23 = new JPanel(); pnlBtn23.setLayout(new GridLayout(1, 3, 5, 0)); pnlBtn23.add(btnValTravaux); pnlBtn23.add(btnAnnTravaux); btnValTravaux.setVisible(false); btnAnnTravaux.setVisible(false); pnlDTravaux.add(pnlBtn23, gbc); gbc.gridy++; pnlDTravaux.add(new JLabel("Type de travaux"), gbc); gbc.gridy++; pnlDTravaux.add(tfTravaux, gbc); pnlTravaux.add(pnlDTravaux, BorderLayout.CENTER);
Je sais que c'est code n'est pas hyper hyper propre mais pour l'instant, je vais déjà essayer de le faire fonctionner "graphiquement", je verrai plus tard pour le rendre plus propre...
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 if(btn == btnPlusTravaux) { edtTravaux = false;//boolean indiquant si on est en mode édition (après clic btnEditionTravaux) ou dans le cas d'un nouveau type de travaux tfTravaux.setText(""); listTravaux.setEnabled(false); passerModeEdition(tfTravaux, true, btnPlusTravaux, btnMoinsTravaux, btnEditTravaux, btnValTravaux, btnAnnTravaux); } else if(btn == btnMoinsTravaux) { alTravaux.remove(listTravaux.getSelectedIndex()); String[] tabTravaux = new String[alTravaux.size()]; for(int u = 0 ; u < tabTravaux.length ; u++) tabTravaux[u] = alTravaux.get(u).getTravaux(); listTravaux = new JList(tabTravaux); listTravaux.updateUI(); listTravaux.repaint(); } else if(btn == btnEditTravaux) { edtTravaux = true; listTravaux.setEnabled(false); passerModeEdition(tfTravaux, true, btnPlusTravaux, btnMoinsTravaux, btnEditTravaux, btnValTravaux, btnAnnTravaux); } else if(btn == btnValTravaux) { if(!tfTravaux.getText().trim().equals("")) { if(edtTravaux) alTravaux.set(listTravaux.getSelectedIndex(), new Travaux(tfTravaux.getText())); else alTravaux.add(new Travaux(tfTravaux.getText())); String[] tabTravaux = new String[alTravaux.size()]; for(int u = 0 ; u < tabTravaux.length ; u++) tabTravaux[u] = alTravaux.get(u).getTravaux(); listTravaux = new JList(tabTravaux); listTravaux.updateUI(); listTravaux.repaint(); edtTravaux = false; passerModeEdition(tfTravaux, false, btnPlusTravaux, btnMoinsTravaux, btnEditTravaux, btnValTravaux, btnAnnTravaux); listTravaux.setEnabled(true); } else { //TODO JOptionPane blabla pas de type vide... } } else if(btn == btnAnnTravaux) { edtTravaux = false; passerModeEdition(tfTravaux, false, btnPlusTravaux, btnMoinsTravaux, btnEditTravaux, btnValTravaux, btnAnnTravaux); listTravaux.setEnabled(true); }
La méthode passerModeEdition() sert à ... bin passer ou non en mode édition
Et je pense que c'est justement ici que ça foire... j'ai essayé repaint, validate, revalidate, et même updateUI, sur les composants, et sur les containers de ces composants et pourtant une erreur subsiste. En fait le changement se fait correctement, mais les JButton ne s'affichent pas : il faut que je passe la souris par dessus pour qu'il apparaisse. Ce qui n'est pas très pratique, je vous l'accorde...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 private void passerModeEdition(JTextField tf, boolean edition, JButton btnAjout, JButton btnSup, JButton BtnEdit, JButton btnVal, JButton btnAnn) { tf.setEditable(edition); btnAjout.setVisible(!edition); btnSup.setVisible(!edition); BtnEdit.setVisible(!edition); btnVal.setVisible(edition); btnAnn.setVisible(edition); btnAjout.repaint(); btnSup.repaint(); BtnEdit.repaint(); btnVal.repaint(); btnAnn.repaint(); }
Quelqu'un pourrait-il m'aider siouplaît ?
Merci d'avance
Partager