| Dans ce petit tutoriel , nous allons voir comment
personnaliser une table à l'aide d'un modèle de table.
Quel est l'interêt de personnaliser une table ? et bien cela permet
, si vous avez une colonne qui contient des valeurs booléenes (true
ou false) de représenter celle ci par une case à cocher
ou encore d' afficher des images dans les cellules d'une table ou de définir
votre propre éditeur de saisie et de l'associer à une colonne
....
Comment réalise-t-on cela ?
Et bien voilà , tout d'abord, si vous jetez un oeil sur le composant
jTable, vous constaterez qu'il possède un propriété
Model . C'est à cette propriété que nous affecterons
notre modèle de table.
Pour créer un modèle de table, cela est relativement simple
et va est exposé dans le petit projet pour Jbuilder7 et qui est
très simple: une application qui affiche une table. Cette dernière
s'appuie sur le modèle de table personnalisé, objet de ce
tutoriel.
Pour télécharger les sources du projet pour jbuilder7
, cliquez ICI
Pour créer ce modèle de table , ajoutez une nouvelle classe
à votre projet et dérivez cette classe à partir de
la classe abstraite AbstractTableModel :

La classe est alors créée avec les 3 méthodes indispensables
qu'il nous faudra, au minimum, implémenter:
getColumnCount() , getValueAt(int rowIndex, int columnIndex) et getRowCount()
.
Pour les besoins de notre exemple, nous allons ajouter les variables
suivantes à la classe:
String[] columnNames = null ;
Object[][] data = null ;
int edit_limite = 0 ;
En effet, nous allons créer un modèle de table qui nous
permettra de personnaliser les noms de colonnes, les colonnes éditables
ou non.La variable data qui est un tableau d'objet, contiendra quand à
elle les données de notre table.
L'initialisation du modèle aura lieu dans le constructeur qui
prend 4 paramètres
public Tmodel(int l, int c,String[] header, int ec)
l est le nombre de lignes des tables basées sur ce modèle,
c le nombre de colonnes, header est un table de "String"
qui représente les entêtes de chacune des c colonnes
et enfin, ec représente le numéro de la colonne au
dessus duquel les colonnes pourront être éditable.
Ensuite, il nous faut implémenter les quelques méthodes
indispensable au bon fonctionement de notre table ainsi que les méthodes
annexes qui vont nous servir à effectuer les spécificités
de notre modèle.
Parmi ces méthode, il y aura :
isCellEditable(int r, int c)
Elle nous permettra de contrôler si une cellule donnée est
en lecture seule où non. Mais en plus, cette fonction conditionne
le comportement des tables reposant sur notre modèle, puisque c'est
grâce à elle que les cellules de la tables sont ou non ouvertes
en saisie. Dans notre cas, cela est simple, on compare l'indice de la
colonne avec la valeur limite des colonnes non éditables qui a
été indiquée au constructeur de notre modèle
de table (ec) . Bien sûr, vous pouvez imaginer d'autre façon
de protéger à la saisie des colonnes.
public Class getColumnClass(int c)
Cette méthode , dans notre exemple est importante , en effet,
c'est elle qui permettra à la table de choisir un type de "renderer"
à utiliser pour la colonne si vous n'en avez pas défini
un particulier. Le type de renderer est choisi en fonction du type d'objet
de la colonne selon la liste suivante:
Boolean , rendu avec un check box.
Number , rendu avec un label aligné à droite
ImageIcon , rendu par un label centré.
Object , rendu par un label qu affiche la valeur de l'objet.
Maintenant, voyons comment utiliser notre modèle de table. Cela
est très simple, après avoir ajouté notre composant
JTable là où nous en avons besoin à l'aide du concepteur,
il suffira d'aller dans le source modifier la méthode jBinit et
de localiser l'instanciation du composant JTable puis de la remplacer
par ces quelques lignes:
String[] colh = {"Ceci","Est","Vrai/faux"} ;//
représente l'entêtes des colonnes
// initialiser notre modèle de table
TablePerso = new Tmodel(15,3,colh,1); // 15 lignes
de 3 colonnes , nos entête et toutes les colonnes <= 1 non éditable
//on définit maintenant la table basée sur
notre modèle de table
jTable1 = new JTable(TablePerso);
Enfin, il ne reste plus qu'a executer notre petit exemple.... pour constater
que nous obtenons bien l'effet escompté:

|