[DefaultTableCellRenderer] Problème d'affichage des données et du renderer
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:
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
|
/**
* 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();
} |
voici EventModel qui affiche les donnée :
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
|
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();
}
} |
et Voilà la classe EventModelRenderer qui est censé affiche les ligne d'une couleur différente
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
|
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;
}
} |
Voilà si quelqu'un aurait une solution ça serait vraiment cool.
Désolé si mon problème a déjà été posté ailleurs, mais je n'ai rien trouvé en faisant mes recherches.
Merci encore.