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

A lire aussi

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

Publié par coramarr dans java

Peut-on trouver des infos sur cette suite qui serait utilise en statistiques. Des documents ou ouvrages qui relatent les divers possibilites d'utilisation de cette suite.
Je suis un particulier ni...

Publié par IB dans tuto

On ne voit pas le gros bouton rouge 'Download' pour charger les 3 scripts, dont vous parlez sur le site

Publié par Daxentuut dans java

Avec les imports c'est mieux :

import java.awt.AWTException
import java.awt.Robot
import java.awt.event.KeyEvent
import java.io.IOException
import java.util.logging.Level
import...

Publié par Fobec dans php5

En effet, Twitter a modifie la structure de son API. P'etre qu'un jour, on trouve le temps pour finaliser un wrapper pour la version 1.1

Publié par rsuinux dans php5

Merci pour cet article.
Cela m'a debloque pour sqlite3 sur openwrt :)
Cordialement.