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
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 java : 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 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
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; } }
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Nickel merci pour votre aide
ça à fonctionné
![]()
Partager