Question TableModel

Le
Bernard Koninckx
Bonjour à tous,

Je cherche a créer un objet héritant de AbstractTableModel qui puisse être
réutilisable partout. Il me semble que l'on m'aie déjà répondu que les
ArrayList était un choix d'utilisation plus judicieux que les Vector.
Cependant, je souhaite que cet ArrayList soit constitué soit de personnes,
soit de références d'entreprises,
Pour que l'object soit le plus général possible, comment puis-je faire pour
:
- Savoir quel est le type de class d'un élément donnée de mon objet
personne, à partir de la TableModel
-

A savoir que je ne préfèrerais pas utiliser de switch .

J'ai pensé entre autre à la réflexivité sur les beans, mais peut-être n'est
ce pas la solution idéale.

Merci à tous pour vos remarques CONSTRUCTIVES,

Bernard
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
jocelyn
Le #636137
Re Bernard !

Ben voila ca commence à devenir interessant :)

Donc tu vas gérer une ArrayList d'objets d'un type quelconque.
Si on regarde AbstractTableModel, on voit qu'il faut définir 3 méthodes:

getRowCount() -> il suffira de renvoyer liste.size()

pour les 2 autres, je ne vois pas d'autre moyen de faire que d'utiliser la
reflexivite, si tu désires n'avoir qu'une
sous-classe de AbstractTableModel. Attention, cette premiere approche sera
probablement insuffisante, car
je pars de l'hypothese que tu veux afficher TOUS les attributs de la classe
Toto, et dans un ordre aleatoire vu que
getDeclaredFields() ne donne aucune certitude sur le tri des champs
retournes
(ceci dit tu peux trier ensuite toi meme par ordre alpha par exemple).
Je vois bien un truc dans ce style donc, EN TRES GROS:

Pour récuperer la classe concernees, ben il suffit de recuperer par exemple
le 1er objet de la liste et de faire
un getClass dessus.

getColumnCount() -> faire un getDeclaredFields() sur la classe et ses
superclasses. Tu vas ainsi constituer un tableau d'objets
Field. La taille de ce tableau sera le resultat de la methode.

getValueAt(row, col) -> pour la ligne pas de pb, il suffit de prendre la
n-ieme ligne de ta liste.
Pour la colonne c un peu + complique, il va falloir que tu te plonges dans
la reflexivite. Une piste:
recuperer l'objet Field de numero col dans ton tableau, et faire un
field.getValue(ligne recuperee avant dans la liste)

Bon courage !


--
Celui qui lutte contre des monstres doit prendre garde, dans le combat, à ne
pas devenir un monstre lui-même

"Bernard Koninckx" news: 40877980$0$11000$
Bonjour à tous,

Je cherche a créer un objet héritant de AbstractTableModel qui puisse être
réutilisable partout. Il me semble que l'on m'aie déjà répondu que les
ArrayList était un choix d'utilisation plus judicieux que les Vector.
Cependant, je souhaite que cet ArrayList soit constitué soit de personnes,
soit de références d'entreprises, ...
Pour que l'object soit le plus général possible, comment puis-je faire
pour

:
- Savoir quel est le type de class d'un élément donnée de mon objet
personne, à partir de la TableModel
- ...

A savoir que je ne préfèrerais pas utiliser de switch .

J'ai pensé entre autre à la réflexivité sur les beans, mais peut-être
n'est

ce pas la solution idéale.

Merci à tous pour vos remarques CONSTRUCTIVES, ...

Bernard




Bernard Koninckx
Le #636136
Et si je souhaites passer des méthodes getter et setter pour chaque
propriétés dont je souhaites prendre ou mettre à jour la valeur. Comment
puis-je faire ?

Bernard

"jocelyn" c67vdr$2m6$
Re Bernard !

Ben voila ca commence à devenir interessant :)

Donc tu vas gérer une ArrayList d'objets d'un type quelconque.
Si on regarde AbstractTableModel, on voit qu'il faut définir 3 méthodes:

getRowCount() -> il suffira de renvoyer liste.size()

pour les 2 autres, je ne vois pas d'autre moyen de faire que d'utiliser la
reflexivite, si tu désires n'avoir qu'une
sous-classe de AbstractTableModel. Attention, cette premiere approche sera
probablement insuffisante, car
je pars de l'hypothese que tu veux afficher TOUS les attributs de la
classe

Toto, et dans un ordre aleatoire vu que
getDeclaredFields() ne donne aucune certitude sur le tri des champs
retournes
(ceci dit tu peux trier ensuite toi meme par ordre alpha par exemple).
Je vois bien un truc dans ce style donc, EN TRES GROS:

Pour récuperer la classe concernees, ben il suffit de recuperer par
exemple

le 1er objet de la liste et de faire
un getClass dessus.

getColumnCount() -> faire un getDeclaredFields() sur la classe et ses
superclasses. Tu vas ainsi constituer un tableau d'objets
Field. La taille de ce tableau sera le resultat de la methode.

getValueAt(row, col) -> pour la ligne pas de pb, il suffit de prendre la
n-ieme ligne de ta liste.
Pour la colonne c un peu + complique, il va falloir que tu te plonges dans
la reflexivite. Une piste:
recuperer l'objet Field de numero col dans ton tableau, et faire un
field.getValue(ligne recuperee avant dans la liste)

Bon courage !


--
Celui qui lutte contre des monstres doit prendre garde, dans le combat, à
ne

pas devenir un monstre lui-même

"Bernard Koninckx" news: 40877980$0$11000$
Bonjour à tous,

Je cherche a créer un objet héritant de AbstractTableModel qui puisse
être


réutilisable partout. Il me semble que l'on m'aie déjà répondu que les
ArrayList était un choix d'utilisation plus judicieux que les Vector.
Cependant, je souhaite que cet ArrayList soit constitué soit de
personnes,


soit de références d'entreprises, ...
Pour que l'object soit le plus général possible, comment puis-je faire
pour

:
- Savoir quel est le type de class d'un élément donnée de mon objet
personne, à partir de la TableModel
- ...

A savoir que je ne préfèrerais pas utiliser de switch .

J'ai pensé entre autre à la réflexivité sur les beans, mais peut-être
n'est

ce pas la solution idéale.

Merci à tous pour vos remarques CONSTRUCTIVES, ...

Bernard








Bernard Koninckx
Le #635843
Peut-être que la solution (description du problème) que je viens de décrire
est trop compliquée ammetre en place. Avez-vous d'autres suggestions ?

Merci

Bernard

"jocelyn" c67vdr$2m6$
Re Bernard !

Ben voila ca commence à devenir interessant :)

Donc tu vas gérer une ArrayList d'objets d'un type quelconque.
Si on regarde AbstractTableModel, on voit qu'il faut définir 3 méthodes:

getRowCount() -> il suffira de renvoyer liste.size()

pour les 2 autres, je ne vois pas d'autre moyen de faire que d'utiliser la
reflexivite, si tu désires n'avoir qu'une
sous-classe de AbstractTableModel. Attention, cette premiere approche sera
probablement insuffisante, car
je pars de l'hypothese que tu veux afficher TOUS les attributs de la
classe

Toto, et dans un ordre aleatoire vu que
getDeclaredFields() ne donne aucune certitude sur le tri des champs
retournes
(ceci dit tu peux trier ensuite toi meme par ordre alpha par exemple).
Je vois bien un truc dans ce style donc, EN TRES GROS:

Pour récuperer la classe concernees, ben il suffit de recuperer par
exemple

le 1er objet de la liste et de faire
un getClass dessus.

getColumnCount() -> faire un getDeclaredFields() sur la classe et ses
superclasses. Tu vas ainsi constituer un tableau d'objets
Field. La taille de ce tableau sera le resultat de la methode.

getValueAt(row, col) -> pour la ligne pas de pb, il suffit de prendre la
n-ieme ligne de ta liste.
Pour la colonne c un peu + complique, il va falloir que tu te plonges dans
la reflexivite. Une piste:
recuperer l'objet Field de numero col dans ton tableau, et faire un
field.getValue(ligne recuperee avant dans la liste)

Bon courage !


--
Celui qui lutte contre des monstres doit prendre garde, dans le combat, à
ne

pas devenir un monstre lui-même

"Bernard Koninckx" news: 40877980$0$11000$
Bonjour à tous,

Je cherche a créer un objet héritant de AbstractTableModel qui puisse
être


réutilisable partout. Il me semble que l'on m'aie déjà répondu que les
ArrayList était un choix d'utilisation plus judicieux que les Vector.
Cependant, je souhaite que cet ArrayList soit constitué soit de
personnes,


soit de références d'entreprises, ...
Pour que l'object soit le plus général possible, comment puis-je faire
pour

:
- Savoir quel est le type de class d'un élément donnée de mon objet
personne, à partir de la TableModel
- ...

A savoir que je ne préfèrerais pas utiliser de switch .

J'ai pensé entre autre à la réflexivité sur les beans, mais peut-être
n'est

ce pas la solution idéale.

Merci à tous pour vos remarques CONSTRUCTIVES, ...

Bernard








Benoît Chauvet
Le #635841
Bernard Koninckx wrote:
Peut-être que la solution (description du problème) que je viens de
décrire est trop compliquée ammetre en place. Avez-vous d'autres
suggestions ?


Je suis pas certain d'avoir compris complètement le besoin, mais peut-être
que tu devrais configurer ton modèle avec une map contenant une liste de
propriété à afficher (le nom du bean) pour chaque classe d'objet rencontré.
Ce paramètrage pourrait être fait à la main (programmation) ou via un
fichier externe (XML me semble un bon choix)

Tu pourras ensuite aller un peu plus loin, en précisant pour chaque bean
quel est le renderer et l'editeur à utiliser (si ce n'est pas un bean de
type simple ou String, auquel cas, tu peux prendre le renderer par défaut),
s'il est éditable, etc...

--
Orabîg

captainpaf
Le #635840
"Bernard Koninckx" news: 40877980$0$11000$
Bonjour à tous,

Je cherche a créer un objet héritant de AbstractTableModel qui puisse être
réutilisable partout. Il me semble que l'on m'aie déjà répondu que les
ArrayList était un choix d'utilisation plus judicieux que les Vector.
Cependant, je souhaite que cet ArrayList soit constitué soit de personnes,
soit de références d'entreprises, ...
Pour que l'object soit le plus général possible, comment puis-je faire
pour

:
- Savoir quel est le type de class d'un élément donnée de mon objet
personne, à partir de la TableModel
- ...

A savoir que je ne préfèrerais pas utiliser de switch .

J'ai pensé entre autre à la réflexivité sur les beans, mais peut-être
n'est

ce pas la solution idéale.

Merci à tous pour vos remarques CONSTRUCTIVES, ...

Bernard


Tu vas sûrement me trouver lourd et insistant, mais qu'elle sera réellement

l'utilitée de ta class ? Tu souhaites vraiment pouvoir afficher n'importe
quels types d'objects ? Même des objects déjà créer et que tu ne peux pas
modifier ? Si la réponse est oui, la réflexivitée me semble être la seule
solution.
Si non, tu n'as pas forcément besoin de savoir quel est la class de l'object
que tu dois afficher. Une piste, tu peux créer une interface qui
représentera les objects que tu dois afficher dans ta JTable (ou autre).
Tous les objets qui doivent être affichés devront bien sûr implémenter cette
interface.
Cette interface devra être composées de toutes les méthodes que tu as besoin
pour ton affichage: ¨Par exemple :
<code>
public interface Displayable
{
/* te renseigne sur le nom des colonnes à afficher pour chaque class
d'objet */
public String[] getColumnName();
/* affiche la valeur de l'object correspondant à la colonne */
public String getDisplayValue(String column);
/* ... */
}
</code>
Après il te suffit de savoir que tes objets sont des displayables pour
pouvoir les afficher sans problème dans ta table.
Voila, en espérant avoir été CONSTRUCTIF.

Bernard Koninckx
Le #635839
Merci pour la réponse constructive que tu viens de me fournir.
Il ne fallait pas prendre cela pour argent content.
C'est simplement que certains s'énervent vraiment rapidement et ne
comprennet pas que des débuttants ont parfois un peu de mal a comprendre ce
qu'ils disent.

Bernard

"captainpaf" c685a3$db8$

"Bernard Koninckx" news: 40877980$0$11000$
Bonjour à tous,

Je cherche a créer un objet héritant de AbstractTableModel qui puisse
être


réutilisable partout. Il me semble que l'on m'aie déjà répondu que les
ArrayList était un choix d'utilisation plus judicieux que les Vector.
Cependant, je souhaite que cet ArrayList soit constitué soit de
personnes,


soit de références d'entreprises, ...
Pour que l'object soit le plus général possible, comment puis-je faire
pour

:
- Savoir quel est le type de class d'un élément donnée de mon objet
personne, à partir de la TableModel
- ...

A savoir que je ne préfèrerais pas utiliser de switch .

J'ai pensé entre autre à la réflexivité sur les beans, mais peut-être
n'est

ce pas la solution idéale.

Merci à tous pour vos remarques CONSTRUCTIVES, ...

Bernard


Tu vas sûrement me trouver lourd et insistant, mais qu'elle sera

réellement

l'utilitée de ta class ? Tu souhaites vraiment pouvoir afficher n'importe
quels types d'objects ? Même des objects déjà créer et que tu ne peux pas
modifier ? Si la réponse est oui, la réflexivitée me semble être la seule
solution.
Si non, tu n'as pas forcément besoin de savoir quel est la class de
l'object

que tu dois afficher. Une piste, tu peux créer une interface qui
représentera les objects que tu dois afficher dans ta JTable (ou autre).
Tous les objets qui doivent être affichés devront bien sûr implémenter
cette

interface.
Cette interface devra être composées de toutes les méthodes que tu as
besoin

pour ton affichage: ¨Par exemple :
<code>
public interface Displayable
{
/* te renseigne sur le nom des colonnes à afficher pour chaque class
d'objet */
public String[] getColumnName();
/* affiche la valeur de l'object correspondant à la colonne */
public String getDisplayValue(String column);
/* ... */
}
</code>
Après il te suffit de savoir que tes objets sont des displayables pour
pouvoir les afficher sans problème dans ta table.
Voila, en espérant avoir été CONSTRUCTIF.





Bernard Koninckx
Le #635836
Est-ce que ce n'est as au niveau de la vue qu'il faut placer le
CellRenderer?

Bernard

"Benoît Chauvet" message de news: c68414$bvt$
Bernard Koninckx wrote:
Peut-être que la solution (description du problème) que je viens de
décrire est trop compliquée ammetre en place. Avez-vous d'autres
suggestions ?


Je suis pas certain d'avoir compris complètement le besoin, mais peut-être
que tu devrais configurer ton modèle avec une map contenant une liste de
propriété à afficher (le nom du bean) pour chaque classe d'objet
rencontré.

Ce paramètrage pourrait être fait à la main (programmation) ou via un
fichier externe (XML me semble un bon choix)

Tu pourras ensuite aller un peu plus loin, en précisant pour chaque bean
quel est le renderer et l'editeur à utiliser (si ce n'est pas un bean de
type simple ou String, auquel cas, tu peux prendre le renderer par
défaut),

s'il est éditable, etc...

--
Orabîg





Benoît Chauvet
Le #635583
Bernard Koninckx wrote:
Est-ce que ce n'est as au niveau de la vue qu'il faut placer le
CellRenderer?


Hum, oui, j'ai extrapolé un peu vite. :)

--
Orabîg

Publicité
Poster une réponse
Anonyme