Salut,

Je ne parviens pas à écouter mes boutons dans mon JTable.
Je suis bien aucourant qu'il y a comme une sorte de vitre sur la JTable qui empêche de listener directement ces boutons (button.addActionListener(this)), alors j'ai essayé à taton plusieurs autres Listeners :
TableModelListener, TableColumnModelListener et PropertyChangeListener
Mais ceux-cis ne font pas mon bonheur...

J'ai trouvé ce post qui dit que l'on peut utiliser MouseListener. J'arrive à récupérer le numéro de ligne et de colonne mais pas à récupérer la valeur de mon JButton.

Quel Listener faut-il que j'utilise pour écouter mes JButtons?

Voici ma classe Main et mon Renderer.

Merci d'avance.
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
public class Main implements MouseListener, TableModelListener, TableColumnModelListener, PropertyChangeListener{
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        Main app = new Main();
        app.run();
    }
 
    public void run() {
String[] champs = {"Matricule", "Nom", "Prénom", "Age"};
 
        Object[][] donnees = {
                {"123", "***", "***", new Integer(20)},
                {"265", "***", "***", new Integer(23)},
                {"985", "***", "***", new Integer(21)},
                {"125", "***", "***", new Integer(22)}
        };
 
        JTable table = new JTable(donnees, champs);
        table.addMouseListener(this);
        table.setSelectionMode(0);
 
        //Création du Model
        //MonTableModel modele = new MonTableModel(champs);
        //modele.addTableModelListener(this);
        //table.setModel(modele);
 
        table.getColumnModel().getColumn(2).setPreferredWidth(10);
        //table.setPreferredSize(new Dimension(50,100));
 
        //Création d'un Renderer
        table.getColumnModel().getColumn(0).setCellRenderer(new Renderer());
        //table.getColumnModel().getColumn(0).addPropertyChangeListener(this);
 
        JFrame frame = new JFrame();
        Container c = frame.getContentPane();
 
        JScrollPane scroll = new JScrollPane(table);
        //scroll.setFillsViewportHeight(true);
        c.add(scroll);
 
        c.add(BorderLayout.SOUTH, new JLabel("Hola"));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
 
 
    public void tableChanged(TableModelEvent arg0) {
        System.out.println("Aîe! Aîe! Aïe! Ca va Chauffer!!!");
    }
 
    public void columnAdded(TableColumnModelEvent arg0) {}
 
    public void columnMarginChanged(ChangeEvent arg0) {}
 
    public void columnMoved(TableColumnModelEvent arg0) {}
 
    public void columnRemoved(TableColumnModelEvent arg0) {}
 
    public void columnSelectionChanged(ListSelectionEvent arg0) {
        System.out.println("Column Selection Changed!");        
    }
 
    public void propertyChange(PropertyChangeEvent arg0) {
        System.out.println("Property Changed!");
    }
 
    public void mouseClicked(MouseEvent e) {
        System.out.println("Click!");
        JTable table = (JTable) e.getSource();
 
        System.out.println(table.getComponentAt(table.getSelectedColumn(), table.getSelectedRow()));
        //Affiche : javax.swing.JTable[,0,0,450x64,alignmentX=null,alignmentY=null,border=,flag..........
    }
 
    public void mouseEntered(MouseEvent arg0) {}
 
    public void mouseExited(MouseEvent arg0) {}
 
    public void mousePressed(MouseEvent arg0) {}
 
    public void mouseReleased(MouseEvent arg0) {}
}
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
 
public class Renderer extends JButton implements TableCellRenderer {
 
    private static final long serialVersionUID = 3347263083921355292L;
 
    public Renderer() {}
 
    public Component getTableCellRendererComponent(
            JTable table, 
            Object columnText, 
            boolean isSelected, 
            boolean hasFocus, 
            int row, 
            int col) {
        this.setText((String) columnText);
 
            return this;
    }
}