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

avatar Marmz

Publié par Marmz

le 19/06/2018 à 11:36:11

Super ! pile ce que je cherchais , merci Mr Fobec

avatar Oscar

Publié par Oscar

le 03/07/2018 à 06:27:57

Je vous remercie pour ce tuto il ma permis non seulement de gerer les couleurs dans les cellules mais aussi de positionner son contenu texte.

avatar Kader

Publié par Kader

le 10/01/2020 à 22:32:24

Tres interessant. Merci Bien! Est ce possible de mettre la couleur sur toute la ligne au lieu de la cellule?

A lire aussi

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

Publié par MeepMeep dans tuto

Attention, un petit correctif a apporter :
headerContent-type: $header_contenttype charset: UTF-8
Remplacer charset: UTF-8 par charsetUTF-8
La difference est subtile mais susceptible d'etre m...

Publié par Fobec dans logiciel

Bonjour,
lorsque le regitrar masque l'identite du proprietaire, foWhoisClient ne pourra pas communiquer cette information. Par contre, le logiciel cherche la meilleur source d'information p...

Publié par Djrac dans tuto

Bjr.
J'ai essaye ce code mais en cliquant sur f5 il me donne un autre temps d'execution malgre qu'il s'agit du meme page PHP. Je comprends pas ou il est le probleme.
Merci de m...

Publié par Oscar dans java

Je vous remercie pour ce tuto il ma permis non seulement de gerer les couleurs dans les cellules mais aussi de positionner son contenu texte.

Publié par amelia dans java

pour 30 sa donne 1346269