Salut à tous
je voudrais changer le rendu de mon JTable. Dans la doc, la démarche est assez simple, il faut créer une classe qui étends l'interface TableCellRenderer et faire un setDefaultCellRenderer pour changer le renderer par défaut.
Seulement, je suis surpris que mon petit code ne marche pas. le voici
Je crée tout d'abord un model simple(Tableau de string)
puis je crée le renderer
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 package clientInterfaces; import javax.swing.event.TableModelListener; import javax.swing.table.TableModel; public class MyJTableModel implements TableModel { String[][] data; String[] title; MyJTableModel(String[][] tab, String[] t){ data = tab; title = t; } public void addTableModelListener(TableModelListener arg0) { // TODO Auto-generated method stub } public Class<?> getColumnClass(int arg0) { // TODO Auto-generated method stub return data[0].getClass(); } public int getColumnCount() { // TODO Auto-generated method stub return title.length; } public String getColumnName(int arg0) { // TODO Auto-generated method stub return title[arg0]; } public int getRowCount() { // TODO Auto-generated method stub return data.length; } public Object getValueAt(int arg0, int arg1) { // TODO Auto-generated method stub return data[arg0][arg1]; } public boolean isCellEditable(int arg0, int arg1) { // TODO Auto-generated method stub return true; } public void removeTableModelListener(TableModelListener arg0) { // TODO Auto-generated method stub } public void setValueAt(Object arg0, int arg1, int arg2) { // TODO Auto-generated method stub data[arg1][arg2] = (String)arg0; } }
puis enfin je teste sur un JTable
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 package clientInterfaces; import java.awt.Component; import javax.swing.JTable; import javax.swing.*; import javax.swing.table.TableCellRenderer; import java.util.Date; public class MyJTableRenderer implements TableCellRenderer { JToggleButton t = new JToggleButton(); public Component getTableCellRendererComponent(JTable arg0, Object arg1, boolean arg2, boolean arg3, int arg4, int arg5) { // TODO Auto-generated method stub t.setText(((String)arg1)); return t; } }
Je sais pas quelle erreur j'ai commise dans ce code mais mon JTable n'affiche pas du tout les cellules sous forme de JToggleButton mais toujours des JLabel. S'il ya une autre methode ou si quelqu'un décelle une erreur, please faite un signe, ça me rend malade
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 package clientInterfaces; import javax.swing.*; import java.awt.*; public class TestJTable { /** * @param args */ public static void main(String[] args) { String[][] tab = {{"Chaine11", "Chaine12", "Chaine13", "Chaine14"}, {"Chaine21", "Chaine22", "Chaine23", "Chaine24"}, {"Chaine31", "Chaine32", "Chaine33", "Chaine34"}, {"Chaine41", "Chaine42", "Chaine43", "Chaine44"}}; String[] title = {"Title1", "Title2", "Title3", "Title4"}; // TODO Auto-generated method stub JTable jtab = new JTable(new MyJTableModel(tab, title)); jtab.setDefaultRenderer(String.class, new MyJTableRenderer()); jtab.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); JScrollPane jsp = new JScrollPane(jtab); JFrame fen = new JFrame("Ma JTable Frame"); fen.getContentPane().setLayout(new GridLayout()); fen.setPreferredSize(new Dimension(500, 500)); fen.add(jsp); fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fen.setVisible(true); } }![]()
Partager