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
| class GradientTableCellRenderer extends DefaultTableCellRenderer {
// Les deux couleurs principales des lignes :
private final Color color1;
private final Color color2;
// A calculer pour chaque colonne :
private int gradientX; // L'origine en X du gradient
private int gradientWidth; // La taille du gradient
private Color gradientColor;// La couleur du gradient pour la ligne courante
public GradientTableCellRenderer(Color c1, Color c2) {
setOpaque(false); // Car on va dessiner le fond nous même
// Les couleurs de l'alternance des lignes :
this.color1 = c1;
this.color2 = c2;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
// On récupère les infos sur la position de la cellule :
Rectangle rect = table.getCellRect(row, column, true);
// On détermine la position en X du début du gradient par rapport à la cellule :
this.gradientX = -rect.x;
// On détermine la taille du gradient par rapport à la cellule :
this.gradientWidth = table.getWidth()-rect.x;
// On détermine la couleur du gradient par rapport à la ligne :
this.gradientColor = row%2==0 ? this.color1 : this.color2;
// On se contente d'appeler la méthode parente qui s'occupe de tout initialiser :
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus,
row, column);
}
@Override
protected void paintComponent(Graphics g) {
if (g instanceof Graphics2D) {
Graphics2D g2 = (Graphics2D) g;
// On défini notre gradient selon les éléments calculé dans getTableCellRendererComponent() :
// On part de la couleur de la ligne vers la couleur par défaut
g2.setPaint(new GradientPaint(this.gradientX, 0, this.gradientColor, this.gradientWidth, getHeight(), getBackground()));
} else {
// Cas particulier où l'on n'aurait pas un Graphics2D :
// On utilise la couleur de fond par défaut !
// (il me semble que cela peut être le cas lors de l'impression)
g.setColor(getBackground());
}
// Obn dessine le fond (en dégradé)
g.fillRect(0, 0, getWidth(), getHeight());
// Et on dessine le composant de manière standard :
super.paintComponent(g);
}
} |
Partager