Bonjour tout le monde.
J'aimerai définir l'action de différents boutons mais dans des conditions bien particulières pour rester polie.
Je dois travailler sur un "code à trous" d'on je ne suis pas l'auteur.
Il me faut le comprendre ce code mais surtout comprendre ou l'auteur voulait en venir.
Et c'est bien là que se trouve mon problème.
Voila donc le résultat du code mis en place:
Sachant que la JTable à en fait plusieurs lignes.
Pour ce qui est de mon travail, je dois définir l'action du bouton "DETAIL".
Voici la classe dans laquelle ce trouve le trou que je doit compléter:
Cette classe est utiliser ici:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public class ViewDetailVehiculeListener extends ButtonListener { private Integer id; public void actionPerformed(ActionEvent e) { /* Vous devez définir comment afficher le détail d'un véhicule ceci dans un popup personnalisée */ } }
"data" et "title" sont définis plus haut dans le code depuis une base de données.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 tab = new JTable(data, title); if (table.equals(DatabaseTable.VEHICULE)) { tab.getColumn("ACTION").setCellRenderer(new ButtonRenderer("SUPPRIMER")); tab.getColumn("ACTION").setCellEditor(new ButtonEditor(new JCheckBox(), "SUPPRIMER")); tab.getColumn("DETAIL").setCellRenderer(new ButtonRenderer("DETAIL")); tab.getColumn("DETAIL").setCellEditor(new ButtonEditor(new JCheckBox(), "DETAIL", new ViewDetailVehiculeListener())); }
Je vous donne BouttonRenderer et BouttonEditor :
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 package fr.ocr.ihm; import java.awt.Component; import javax.swing.JButton; import javax.swing.JTable; import javax.swing.table.TableCellRenderer; public class ButtonRenderer extends JButton implements TableCellRenderer { private String nom; public ButtonRenderer(String title) { nom = title; } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean isFocus, int row, int col) { setText(nom); // On retourne notre bouton return this; } }Mon problème est que je ne comprend pas comment on peut savoir sur le bouton de quel ligne j'ai bien pu appuyer.
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 package fr.ocr.ihm; import java.awt.Component; import javax.swing.DefaultCellEditor; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JTable; import fr.ocr.ihm.listener.ButtonListener; /** * Classe permettant de définir les comportements * des boutons du JTable * @author cysboy */ public class ButtonEditor extends DefaultCellEditor { protected JButton button; private boolean isPushed; private ButtonListener bListener; private String title = ""; // Constructeur avec une CheckBox public ButtonEditor(JCheckBox checkBox, String t) { // Par défaut, ce type d'objet travaille avec un JCheckBox super(checkBox); // On crée à nouveau un bouton button = new JButton(); button.setOpaque(true); // On lui attribue un listener bListener = new ButtonListener(); button.addActionListener(bListener); title = t; } public ButtonEditor(JCheckBox checkBox, String t, ButtonListener l) { // Par défaut, ce type d'objet travaille avec un JCheckBox super(checkBox); // On crée à nouveau un bouton button = new JButton(); button.setOpaque(true); // On lui attribue un listener bListener = l; button.addActionListener(bListener); title = t; } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { // On précise le numéro de ligne à notre listener bListener.setRow(row); // Idem pour le numéro de colonne bListener.setColumn(column); // On passe aussi le tableau en paramètre pour des actions potentielles bListener.setTable(table); // On réaffecte le libellé au bouton button.setText(title); // On renvoie le bouton return button; } }
Peut être que je dois utiliser getTableCellEditorComponent() quelque part mais je ne voit même pas quoi en faire.
Merci de votre aide.
Partager