Personnalisation d'un JTable en mode edition

Résolu
killerb0b Messages postés 12 Date d'inscription vendredi 17 octobre 2003 Statut Membre Dernière intervention 6 juillet 2006 - 18 avril 2006 à 15:24
cs_ducheseb Messages postés 344 Date d'inscription mardi 18 mai 2004 Statut Membre Dernière intervention 23 juin 2006 - 19 avril 2006 à 18:46
Bonjour,

Après avoir consulter beaucoup de forums sur ce sujet qui n'ont pas su m'aider, je viens poser une question en espérant que quelqu'un pourra me répondre.

En fait, je possède un formulaire qui contient un JTable Swing de grande taille. La plupart des cellules de ce JTable contiennent beaucoup de texte et le programmeur qui est passé avant moi à choisi d'inserer dans le texte de ces cellules des balises HTML (<HTML></HTML> et
) de manière a forcer les retours a la ligne dans les cellules de facon a ce qu'elle ne soit pas trop large.
Bien entendu ces balises n'apparaissent pas à l'utilisateur lors du rendu du JTable.

Jusqu'ici tout fonctionne bien, mais ce qui m'a été demandé et de rendre ces cellules éditables, ce que j'ai reussi a faire grâce à la methode isCellEditable d'une classe dérivant de AbstractTableModel.
Le probleme est que lorque je double-clic dans une cellule pour éditer son contenu, le code HTML qui a été utilisé pour la mise en forme réapparait.

Quelqu'un pourrait-il me dire comment je pourrais faire disparaitre ces balises en mode editions kit à les remettre lorsque l'utilisateur validera son edition afin que cette mise en forme soit transparente pour lui?

J'ai commencais a creuser avec les DefaultTableCellRenderer mais cela fait peu de temps que je programme en Java et je galère un peu.

Merci d'avance.

10 réponses

killerb0b Messages postés 12 Date d'inscription vendredi 17 octobre 2003 Statut Membre Dernière intervention 6 juillet 2006
18 avril 2006 à 17:27
Je veins de voir qu'il existait une classe DefaultCellEditor qu'il est possible de dériver de maniere à voir accés a des méthodes comme : addCellEditorListener, cancelCellEditing, getCellEditorValue, isCellEditable, removeCellEditorListener, shouldSelectCell, stopCellEditing.


Est-ce la piste que je dois suivre?

Désolé si je fais un peu mon boulet, mais les JTables et toutes les classes qui gravitent autour sont vraiement nouveau pour moi et je vous assure que jevais de mon mieux.
3
cs_ducheseb Messages postés 344 Date d'inscription mardi 18 mai 2004 Statut Membre Dernière intervention 23 juin 2006 9
18 avril 2006 à 18:02
c'est cela.
En suivant l'exemple de Sun, tu devrais y arriver.

"A game is a series of interesting choices." Sid Meier
3
cs_ducheseb Messages postés 344 Date d'inscription mardi 18 mai 2004 Statut Membre Dernière intervention 23 juin 2006 9
19 avril 2006 à 18:46
ici:
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html
et là d'autres exemples
http://www.java2s.com/ExampleCode/Swing-JFC/Table.htm

"A game is a series of interesting choices." Sid Meier
3
thevman Messages postés 83 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 3 juillet 2008
18 avril 2006 à 15:54
Solution système D:
... Une solution serait de passer par une fenetre intermediaire.
Qd la personne clique sur un bouton "modifier" ou un clique de souris sur ta cellule,
tu ouvre une fenetre avec ton texte en ayant fait un prétraitement auparavant (tu retire les balises HTML)
puis une fois les mofiication effectuer qd la personne click sur un bouton "ok" tu insére les balises a nouveau et tu inseres ton texte dans ta cellule.

Je Pense que y a mieux comme solutions, la c juste une idée comme ca

Nare Trouvé !!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ducheseb Messages postés 344 Date d'inscription mardi 18 mai 2004 Statut Membre Dernière intervention 23 juin 2006 9
18 avril 2006 à 15:55
Tu peux peut-être faire cela dans les fonctions getValueAt et setValueAt du TableModel:

public Object getValueAt(int row, int col) {
//suppression des balises pour renvoyer que le texte
}

public void setValueAt(Object value, int row, int col) {
// Mise en place des balises puis sauvegarde
}

"A game is a series of interesting choices." Sid Meier
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
18 avril 2006 à 16:37
Salut,





sinon autre methode au moment ou ta cellue devient editable tu parse le
contenu et tu fais le menage des qu'elle redevient normale(non
editable) tu reformatte les chaines

WORA
0
killerb0b Messages postés 12 Date d'inscription vendredi 17 octobre 2003 Statut Membre Dernière intervention 6 juillet 2006
18 avril 2006 à 16:42
Whoua!! Quelle rapidité.

Merci a tout les deux pour vos suggestions.

thevman : Je garde ta solution sous le coude au cas où je n'arrive pas à faire mieux, mais mon chef préférerai que j'utilise l'edition des JTable.

ducheseb : Ton idée me semble très bonne mais ce qui me gène c'est que je ne sais pas à quelle endroit appeler ces méthodes pour qu'elles aient lieux juste après que l'utilisateur passe en mode édition.

Y a t-il un événement qui est déclenché au moment de ce passage?

En tout cas, merci de votre aide.
0
cs_ducheseb Messages postés 344 Date d'inscription mardi 18 mai 2004 Statut Membre Dernière intervention 23 juin 2006 9
18 avril 2006 à 16:48
Il faut que tu regardes la classe implémentant le TableModel ou que tu t'en crée une si tu n'en a pas:

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

Et dès que tu edites une cellule ou que tu valides une modif, ces fonctions sont appelées.

"A game is a series of interesting choices." Sid Meier
0
killerb0b Messages postés 12 Date d'inscription vendredi 17 octobre 2003 Statut Membre Dernière intervention 6 juillet 2006
18 avril 2006 à 17:05
J'ai effectivement une classe qui derive de AbstractTableModel mais je ne vois pas quelles méthodes je dois utiliser.

En tout cas, merci pour ton aide, je sens que je touche au but.
0
killerb0b Messages postés 12 Date d'inscription vendredi 17 octobre 2003 Statut Membre Dernière intervention 6 juillet 2006
19 avril 2006 à 09:27
Merci pour la confirmation.

En revanche, si quelqu'un connait de bons exemples sur le sujet, je ne suis pas contre quelques bonnes adresses (y compris les exemples de Sun car je debute dans la programmation Java et je ne sais même pas où les trouver).

Merci encore a tous.
0
Rejoignez-nous