Bonjour,
je cherche a inserer des boutons dans un cellule d'une colonne de ma jtable.
J'ai essaye de chercher dans le tuto. mais j'ai vraiment pas trouver de reponse...
On parlait de la classe renderer.
Comment faire ?
Merci.
Bonjour,
je cherche a inserer des boutons dans un cellule d'une colonne de ma jtable.
J'ai essaye de chercher dans le tuto. mais j'ai vraiment pas trouver de reponse...
On parlait de la classe renderer.
Comment faire ?
Merci.
How to use Tables
ou
JComponentsTable mais vraiment pour cas particulier.
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 class JTableButtonRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (value instanceof JButton) return (JButton) value; return this; } } class JTableButtonMouseListener implements MouseListener { private JTable __table; private int column; private void __forwardEventToButton(MouseEvent e) { TableColumnModel columnModel = __table.getColumnModel(); column = columnModel.getColumnIndexAtX(e.getX()); int row = e.getY() / __table.getRowHeight(); Object value; JButton button; MouseEvent buttonEvent; if (row >= __table.getRowCount() || row < 0 || column >= __table.getColumnCount() || column < 0) return; value = __table.getValueAt(row, column); if (!(value instanceof JButton)) return; button = (JButton) value; buttonEvent = (MouseEvent) SwingUtilities.convertMouseEvent( __table, e, button); button.dispatchEvent(buttonEvent); // This is necessary so that when a button is pressed and released // it gets rendered properly. Otherwise, the button may still appear // pressed down when it has been released. __table.repaint(); } public JTableButtonMouseListener(JTable table) { __table = table; } public void mouseClicked(MouseEvent e) { __forwardEventToButton(e); // tu peux ici rajouter tes actions } public void mouseEntered(MouseEvent e) { // __forwardEventToButton(e); } public void mouseExited(MouseEvent e) { // __forwardEventToButton(e); } public void mousePressed(MouseEvent e) { // __forwardEventToButton(e); } public void mouseReleased(MouseEvent e) { // __forwardEventToButton(e); } } class MyJButtonTableModel extends DefaultTableModel { public MyJButtonTableModel(Vector<String> columnNames, int numRow) { super(columnNames, numRow); } public Class getColumnClass(int c) { if (c != 0) { return JButton.class; } return String.class; } public boolean isCellEditable(int row, int col) { return false; } }
JTableButtonRenderer : redefini l'affichage d'une cellule
JTableButtonMouseListener : c est du code repris![]()
MyJButtonTableModel :
ce qui est tres important, c est le "getColumnClass()" qui doit retourner la classe JButton.class pour les colonnes que l'on veut
NB : il manque une chose. je n arrive pas a avoir l'effet bouton, c est a dire quand je clique dessus, il ne s enfonce pas !
j espere que ca va t aider.
Bonjour,
le TableCellRenderer est une espèce de tampon dont on se sert pour dessiner les cases, puis qu'on balance à la poubelle. Il n'est pas intégré dans l'interface comme dans un JPanel.
Lorsqu'on clique sur une case, l'événement est envoyé au TableCellEditor, qui est alors affiché à la place du Renderer. Ce composant est actif, lui (si c'est un bouton, il réagira aux clics). Donc dans ton cas, il faut préciser que le même bouton sert à la fois de TableCellRenderer et de TableCellEditor.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager