Bonjour,
J'ai un JTable sur netbeans avec 6 colonnes, j'aimerai mettre les 3 premières colonnes d'une couleurs et les 3 dernières d'une autres couleurs.
J'aimerai savoir qu'elle commande je peu utiliser pour faire cela
Merci
Version imprimable
Bonjour,
J'ai un JTable sur netbeans avec 6 colonnes, j'aimerai mettre les 3 premières colonnes d'une couleurs et les 3 dernières d'une autres couleurs.
J'aimerai savoir qu'elle commande je peu utiliser pour faire cela
Merci
Utilisez un CellRenderer
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 public class YellowCellRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); c.setBackground(Color.YELLOW); return c; } } public class RedCellRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); c.setBackground(Color.RED); return c; } } table.getColumnModel().getColumn(0).setCellRenderer(new YellowCellRenderer()); table.getColumnModel().getColumn(1).setCellRenderer(new YellowCellRenderer()); table.getColumnModel().getColumn(2).setCellRenderer(new YellowCellRenderer()); table.getColumnModel().getColumn(3).setCellRenderer(new RedCellRenderer()); table.getColumnModel().getColumn(4).setCellRenderer(new RedCellRenderer()); table.getColumnModel().getColumn(5).setCellRenderer(new RedCellRenderer());
Salut,
Même pas besoin de surcharger la classe DefaultTableCellRenderer. Et attention à la gestion de la couleur en fonction de la sélection (avec l'implémentation proposée par GlobuleVert, on n'a plus d'affichage de sélection) !
On peut faire tout simplement :
C'est utile en revanche si la couleur doit changer en fonction du contenu de la cellule, comme dans cet exemple.Code:
1
2
3
4 DefaultTableCellRenderer rendererColumn2 = new DefaultTableCellRenderer(); rendererColumn2.setBackground(Color.CYAN); table.getColumnModel().getColumn(2).setCellRenderer(rendererColumn2); // affecte le renderer à une colonne en particulier
Code:
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
87
88
89
90
91
92 public class JTableRendererDemo { public static void main(String[] args) { JFrame frame = new JFrame("Démo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTable table = createTable(); frame.add(new JScrollPane(table)); frame.setSize(600, 400); frame.setLocationRelativeTo(null); frame.setVisible(true); } private static JTable createTable() { TableModel model = new AbstractTableModel() { Object[][] data = { { 1, "abc", "def", "ghi" }, { 2, "jkl", "mno", "pqr" }, { 3, "stu", "vwx", "yz" } }; String[] columns = { "id", "A", "B", "C" }; @Override public String getColumnName(int col) { return columns[col]; } @Override public boolean isCellEditable(int row, int col) { return col>0; } @Override public Class<?> getColumnClass(int col) { switch(col) { case 0: return Integer.class; default: return String.class; } } @Override public int getColumnCount() { return columns.length; } @Override public int getRowCount() { return data.length; } @Override public Object getValueAt(int row, int col) { return data[row][col]; } @Override public void setValueAt(Object value, int row, int col) { data[row][col]=value; } }; JTable table = new JTable(model); DefaultTableCellRenderer rendererColumn2 = new DefaultTableCellRenderer(); rendererColumn2.setBackground(Color.CYAN); table.getColumnModel().getColumn(2).setCellRenderer(rendererColumn2); // affecte le renderer à une colonne en particulier DefaultTableCellRenderer rendererInteger = new DefaultTableCellRenderer(); rendererInteger.setBackground(Color.GREEN); table.setDefaultRenderer(Integer.class, rendererInteger); // affecte le renderer pour un type return table; } }
Nickel merci pour votre aide
ça à fonctionné
:applo: