I. L'application▲
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)
- getRowCount()
Pour les besoins de notre exemple, nous allons ajouter les variables suivantes à la classe:
2.
3.
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:
2.
3.
4.
5.
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é: