Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Vérifier la saisie dans un JTable

3 réponses
Avatar
Thibal
Bonjour à tous,

je viens poster ce message car j'ai un petit problème sur lequel je
m'arrache les cheveux, et je me demande si quelqu'un est en mesure de
m'aider. Le problème est le suivant :

Comment faire du contrôle de saisie dans les cellules d'un JTable ?

Pour n'importe quel composant classique, je plaçais mes méthodes de
vérification de la saisie dans un public void focusLost();

Mais celà ne marche pas dans un JTable, à cause des editor je pense. En
fait si j'essaie de faire mon contrôle dans un focusLost, je peux bien
récupérer le text qu'il y'avait dans l'editor, je fais mes tests, je
modifie le texte, mais impossible de refaire un setText().

J'ai alors pensé à setValueAt(), mais je ne peux pas obtenir les
coordonnées de la cellule que j'étais en train d'éditer avant qu'elle
perde le focus. J'ai aussi essayé de passer par un TableModelListener
mais je n'ai fait qu'accumuler les bugs...

Quelqu'un a t'il une méthode simple et efficace pour faire du contrôle
sur ce qui vient d'être saisi dans un JTable ?

Merci d'avance,


Thibaut

3 réponses

Avatar
Isammoc
je viens poster ce message car j'ai un petit problème sur lequel je
m'arrache les cheveux, et je me demande si quelqu'un est en mesure de
m'aider. Le problème est le suivant :

Comment faire du contrôle de saisie dans les cellules d'un JTable ?

Pour n'importe quel composant classique, je plaçais mes méthodes de
vérification de la saisie dans un public void focusLost();

Mais celà ne marche pas dans un JTable, à cause des editor je pense. En
fait si j'essaie de faire mon contrôle dans un focusLost, je peux bien
récupérer le text qu'il y'avait dans l'editor, je fais mes tests, je
modifie le texte, mais impossible de refaire un setText().

J'ai alors pensé à setValueAt(), mais je ne peux pas obtenir les
coordonnées de la cellule que j'étais en train d'éditer avant qu'elle
perde le focus. J'ai aussi essayé de passer par un TableModelListener mais
je n'ai fait qu'accumuler les bugs...

Quelqu'un a t'il une méthode simple et efficace pour faire du contrôle sur
ce qui vient d'être saisi dans un JTable ?

Merci d'avance,


De manière générale, c'est moche de mettre un listener pour vérifier la
valeur mise par l'utilisateur, refaire un model est souvent plus propre.

Thibaut


Apres, ici, si tu veux vraiment le faire, tu dois écouter l'éditeur, et il a
toutes les informations nécessaires...

Avatar
Thibal
De manière générale, c'est moche de mettre un listener pour vérifier la
valeur mise par l'utilisateur, refaire un model est souvent plus propre.


Ok je veux bien, mais un modèle de quoi ? Désolé de t'embêter, mais je
suis vraiment perdu là et je ne vois pas trop comment faire. Peux tu me
guider un peu plus s'il te plaît ? Merci beaucoup?

Thibaut



Apres, ici, si tu veux vraiment le faire, tu dois écouter l'éditeur, et il a
toutes les informations nécessaires...


Non je ne suis pas forcemment têtu sur le fait d'utiliser un listener,
mais comme je te l'ai dit, ça ne marche pas. Si on met un listener sur
l'Editor de cellule, on peut bien récupérer le texte, mais on ne peut
pas faire setText, et comme je l'ai dit, pour faire un setValueAt il
faudrait que l'editeur sache à quelle cellule il appartient...

Re-merci d'avance,


Thibaut


Avatar
Isammoc
De manière générale, c'est moche de mettre un listener pour vérifier la
valeur mise par l'utilisateur, refaire un model est souvent plus propre.


Ok je veux bien, mais un modèle de quoi ? Désolé de t'embêter, mais je
suis vraiment perdu là et je ne vois pas trop comment faire. Peux tu me
guider un peu plus s'il te plaît ? Merci beaucoup?


Swing est basé sur le concept MVC (Modèle Vue Controleur)
Donc, regarde de ce coté.

Ensuite, le model d'une JTable TableModel.
Essaye d'implémenter le tiens (fait descendre de DefaultTableModel c'est
plus sur)

De plus, tu peux controler ce que fais ton Editor en implémentant les tiens.
Regarde vers TableCellEditor
et setCellEditor de JTable

Apres, ici, si tu veux vraiment le faire, tu dois écouter l'éditeur, et
il a toutes les informations nécessaires...


Non je ne suis pas forcemment têtu sur le fait d'utiliser un listener,
mais comme je te l'ai dit, ça ne marche pas. Si on met un listener sur
l'Editor de cellule, on peut bien récupérer le texte, mais on ne peut pas
faire setText, et comme je l'ai dit, pour faire un setValueAt il faudrait
que l'editeur sache à quelle cellule il appartient...


getEditingColumn()
getEditingRow()

de JTable t'aidera surement.

Re-merci d'avance,

Thibaut


Isammoc
La javadoc est ton amie.