Publié le 04/08/2010
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
2 commentaires

Colorier une cellule dans un JTable

Le composant JTable de JAVA est un tableur simplifié comme une feuille Excel. Dans cet article, nous allons donner une couleur différente aux cellules en fonction de la valeur qu'elle contient.

Changer la couleur dans un JTable

L'affichage des lignes est définit dans la class DefaultTableCellRenderer associé à JTable. Dans le tutoriel, nous allons hérité une class de DefaultTableCellRenderer pour:
fixer la couleur de fond d'une colonne,
mettre en couleur une cellule,
définir l'alignement du texte.

Remplir un JTable avec TableModel

Utilisons l'exemple suivant pour ajouter des données dans un JTable:

private void fillTable() {
   DefaultTableModel tablemodel = (DefaultTableModel) jTableBanque.getModel();
   tablemodel.setRowCount(0);
   this.addJTableLine("01/07/2010", "1000,00 Euro", "", "1000,00 Euro");
   this.addJTableLine("10/07/2010", "", "500,00 Euro", "500,00 Euro");
   this.addJTableLine("15/07/2010", "", "700,00 Euro", "-200,00 Euro");
   this.addJTableLine("20/07/2010", "400,00 Euro", "", "200,00 Euro");
   this.addJTableLine("28/07/2010", "", "900,00 Euro", "-700,00 Euro");
}
 
private void addJTableLine(String date, String recette, String depense, String solde) {
   DefaultTableModel tablemodel = (DefaultTableModel) jTableBanque.getModel();
   Object[] objects = new Object[4];
   objects[0] = date;
   objects[1] = recette;
   objects[2] = depense;
   objects[3] = solde;
   tablemodel.addRow(objects);
}

En l'état sans définir une couleur de fond aux cellules, le JTable obtenu ressemble à cela:

default_jtable

Hériter de TableCellRenderer pour définir ses critères d'affichage

Pour personnaliser l'interface d'un composant JAVA, bien souvent il faut créer un Renderer à soi dans lequelle les aspects sont paramétrés.

import java.awt.Component;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
 
/**
 * Définir l'affichage dans un JTable
 * @author Fobec 2010
 */
public class jTableRender extends DefaultTableCellRenderer {
 
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        /**
         * Fixer la couleur de fond de la première colonne en jaune
         */
        if (column == 0) {
            Color clr = new Color(255, 255, 240);
            component.setBackground(clr);
        } else {
            Color clr = new Color(255, 255, 255);
            component.setBackground(clr);
        }
        /**
         * Colorier les cellules en orange si le montant est négatif
         */
        Object o = table.getValueAt(row, 3);
        if (o != null && component instanceof JLabel) {
            JLabel label = (JLabel) component;
            if (label.getText().contains("-")) {
                Color clr = new Color(255, 226, 198);
                component.setBackground(clr);
            }
            /**
             * Center le texte pour la colonne 0 et aligner le texte à droite pour les autres colonnes
             */
            if (column == 0) {
                label.setHorizontalAlignment(CENTER);
            } else {
                label.setHorizontalAlignment(RIGHT);
            }
        }
        return component;
    }
}

Note:
La class parente renvoie un objet non typé sur getTableCellRendererComponent. Un cast de component vers JLabel permet d'accéder à la valeur de la cellule et de définir l'alignement.

Associer le Render au JTable

La dernière étape consiste à associer notre méthode de dessin au JTable. L'instruction est à placer dans le constructeur ou dans l'initialisation du JFrame.

jTableBanque.setDefaultRenderer(Object.class, new jTableRender());

Avec l'utilisation d'un TableCellRender, le tableau prend l'aspect suivant:

render_jtable

L'exemple de colorisation d'une cellule d'un JTable est basé sur un logiciel de gestion de compte. Le render effectue correctement la mise en forme, la ligne de titre est en gris, la colonne des dates en jaune et lorsque le montant est négatif la cellule est de couleur rouge.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.
avatar Berenger

Publié par Berenger

le 26/02/2012 à 16:58:44

Bonjour Mr Foebec je suis vraiment très content de cette réponse vous êtes simplement génial. quand je pense au nombre de jour que ça m'a pris et le temps que j'ai perdu à chercher cela, je ne peut que te dire merci et encore merci ...

avatar jpa71

Publié par jpa71

le 19/10/2015 à 21:47:52

Efficace.. Bien commente.. Du code bien pense
Bravo

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
java - class
Mise a jour
04/08/2010
Visualisation
vu 4782 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 261 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Débutant dans CMS

merci , et bon courage pour d'autre programme

Publié par traitstone dans CMS

c'est bou et tres bon chose

Publié par stam dans tuto

Le code est interessant. Que doit contenir le fichier index ?

Publié par Vincent dans tuto

Sympa votre petit script :) Oui il existe des bibliotheques deja toutes faites mais elles sont en general 50x plus lourdes que ce petit bout de code qui fait exactement ce qu'il faut. En plus votr...

Publié par Fobec dans php5

a priori il manque simplement le R dans le nom de la constante
PDO::ATTR_ERRMODE en remplacement de PDO::ATT_ERRMODE