Bonjour à tous,
J'ai un petit problème avec un TableCellRenderer.
J'essaye d'afficher des données dans une table, mais j'aimerais pouvoir en meme temps changer l'affichage de ces données (dans le code ci-dessous j'affiche juste une ligne sur deux de couleur différente).
Mais en gros je n'arrive qu'a obtenir soit l'affichage des données, soit l'affichage des couleurs.
Classe qui update ma table:
voici EventModel qui affiche les donnée :
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 /** * Update la JTable apres chaque evenement * */ public void updateJTableCalendar() { // On definie le model EventModel model = new EventModel(); TableCellRenderer modelRenderer = new EventModelRenderer(); // On instancie la variable JTableCalendar et la ScrollPane JTableCalendar = new JTable(model); model.fireTableDataChanged(); // on applique le model renderer JTableCalendar.setDefaultRenderer(JLabel.class,modelRenderer); pane = new JScrollPane(JTableCalendar); pane.setBounds(7, 5, 784, 718); // On ajoute la table au panel JPanelCalendar.add(pane); JTableCalendar.repaint(); pane.repaint(); JPanelCalendar.repaint(); }
et Voilà la classe EventModelRenderer qui est censé affiche les ligne d'une couleur différente
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 public class EventModel extends AbstractTableModel { /** * */ private static final long serialVersionUID = 1L; /** * */ public Class<?> getColumnClass(int arg0) { // TODO Auto-generated method stub return JLabel.class; } /** * Renvoi le nombre de colonne */ public int getColumnCount() { return 8; } /** * Renvoi le nom des colonnes */ public String getColumnName(int colonne) { String jour = null; .......... return jour; } /** * Renvoi le nombre de ligne */ public int getRowCount() { // On fixe le nombre de ligne a 48 (2*24h) return 48; } /** * Renvoi la valeur d'une case en x, y */ public String getValueAt(int ligne, int colonne) { JLabel donnee = new JLabel(); switch(colonne) { // Cas des heures case 0: if( (ligne % 2) == 0 ) { if(ligne != 0) ligne = ligne - ligne/2; if(ligne < 10) donnee.setText("0" + ligne + ":00"); else donnee.setText(ligne + ":00"); } else donnee.setText(""); break; } return donnee.getText(); } }
Voilà si quelqu'un aurait une solution ça serait vraiment cool.
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 public class EventModelRenderer extends DefaultTableCellRenderer { /** * */ private static final long serialVersionUID = 1L; private Color lightBlue = new Color(241, 245, 250); private Color blue = new Color(61, 128, 223); /** * Constructeur * */ public EventModelRenderer() { super(); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if (value instanceof JLabel) { if((row % 2) == 0) { cell.setBackground(lightBlue); } else cell.setBackground(Color.WHITE); if(isSelected) cell.setBackground(blue); } return cell; } }
Désolé si mon problème a déjà été posté ailleurs, mais je n'ai rien trouvé en faisant mes recherches.
Merci encore.
Partager