Publié le 04/08/2010
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
3 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

avatar Tactic Rayan

Publié par Tactic Rayan

le 05/01/2017 à 09:23:41

Merci beaucoup, c'est tres interressent, tres longtemps que j'ai recherche ce code

A lire aussi

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

Publié par Axel dans java

le resultat de la fonction getMacAddress() est de type String,
ainsi pour afficher l'adresse MAC dans une JLabel

String macAddress=NetworkHardware.getMacAddress();
label.setText(macAd...

Publié par Bonjour dans java

Joli travail!
Par contre, savez vous que votre barre de progression s'arrête à un certain pourcentage?

Publié par Lathois dans CMS

super impec <br>ca marche du feu de ZEUS<br>depuis le temps que je cherchais ca<br>j ai enfin trouve<br><br>merci Athois

Publié par deefaze dans CMS

R := Byte(Color);
G := Byte(Color shr 8);
B := Byte(Color shr 16);

Publié par pgts09 dans tuto

Bonjour,
Felicitations pour ce tuto simple, et qui semble repondre exactement ce que je cherchais !
Malheureusement je n'arrive pas faire fonctionner, voici ce que donne mon essai : J'ai pourt...