IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

Récupérer l'index d'une ligne dans un JTable


Sujet :

Composants Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Points : 130
    Points
    130
    Par défaut Récupérer l'index d'une ligne dans un JTable
    Bonjour tout le monde;

    J'ai un Jtable composé de 4 colonnes (identifiant, nom, prénom, age), il'est remplit à partir d'une base de donnée.

    Je souhaite récupérer l'index de la ligne qui contient une valeur précise dans la colonne identifiant:

    par exemple :

    je veux récupérer l'index de la ligne qui a la valeur 5 dans la colonne identifiant.

    Avez-vous une idée pour ça?

    Merci d'avance.

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    Une itération sur la colonne identifiant.

    Il n'y a pas de méthode "find" dans une JTable

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Points : 130
    Points
    130
    Par défaut
    Merci pour votre réponse.
    en faîte moi je voulais pas faire cette itération (car ça peut contenir des milliers de ligne).
    Mais s'il y a pas de choix, je ferai l'itération .
    Merci encore une fois.

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    L'autre possibilité est de faire la recherche directement dans la base de données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM MaTable WHERE ID = 5
    en réseau local, le résultat est instantané

    Je n'avais pas évoqué la possibilité de mettre plusieurs milliers de lignes dans la JTable.
    c'est long à charger et l'utilisateur ne va pas les parcourir un par un pour y chercher quelque chose.

    Je crois qu'on peut poursuivre la discussion sur cet aspect.
    Si tu as une application avec, mettons, un fichier de 10.000 noms
    alors tu peux mettre au dessus de ta JTable un JTextField qui servira, par exemple, à chercher un nom
    et un bouton "chercher" qui déclenchera la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM MaTable WHERE nom LIKE '%" + jTextFieldRecherche + '%
    (après il faut améliorer le système avec un preparedStatement mais on verra cela plus tard)

    Du coup, tu ne mets dans ta JTable que le résultat de la requête

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Points : 130
    Points
    130
    Par défaut
    Bonjour,

    Merci pour votre réponse.

    Je vois pas très bien comment faire ça, mais j' ai trouvé une solution que je trouve plus simple, lors de lancement de la requête qui me charge les personnes (select * from personne), je met dans le bean qui mappe la table une variable qui stocke l'ordre du bean dans la liste.

    Je vais essayer, qu'est ce que tu en penses?

    Merci d'avance.

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    Il faudrait en dire un peu plus sur le but de la JTable.
    On sait qu'elle doit servir à afficher des milliers de noms
    et qu'il faut repérer une ligne en fonction de la 1ère colonne.
    Si tu nous en disait plus, on pourrait t'aider plus efficacement.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Points : 130
    Points
    130
    Par défaut
    T'as raison;

    En faîte j'ai pas bien expliqué le problème.

    La solution que j'ai proposé ne marche pas.

    Voici exactement mon problème,

    Dans mon JTable j'affiche des personnes, l'utilisateur peut sélectionner une personne et la modifier, moi je veux la sélectionner dans la table après sa modification :

    Exemple :
    j'ai les éléments suivants:

    personne 1: nom1 , prenom1.
    personne 2 : nom2 , prenom2.
    personne 3 : nom3 , prenom3.
    personne 4: nom4 , prenom4.

    l'utilisateur peut choisir la personne 3, la modifie, après la modification, je recharge la liste, et je veux aprés le rechargement que la liste sélectionne la perssonne3 modifiée, par exemple si on la modifie par nom = toto, le résultat sera comme suit :

    personne 1: nom1 , prenom1.
    personne 2 : nom2 , prenom2.
    personne 4: nom4 , prenom4.
    personne 3 : toto , prenom3.

    mon problème c'est de sélectionner la la personne 3 dans le JTable.

    J'espère que c'est un peu claire maintenant.

    Merci d'avance.

  8. #8
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    D'accord.
    Est-ce que l'utilisateur est seul à travailler avec cette table au moment où il fait une modification ?

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Points : 130
    Points
    130
    Par défaut
    Oui, c'est le seule.

  10. #10
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    Dans ce cas, si l'utilisateur fait les modifications directement dans la JTable,
    et que tu es sûr d'avoir opéré les modifications dans la base,
    pourquoi recharger avec les données de la requête ?

    Sinon, si tu veux recharger avec les données de la base,
    comme il n'y a pas eu d'ajout ni de suppression (on n'a fait que modifier un enregistrement)
    alors le numéro de ligne ne change pas.
    Donc il faut que tu le place dans une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int rowIndex = table.getSelectedRow()
    ensuite tu fais la mise à jour de la base
    puis le rechargement de la table
    enfin tu replaces la sélection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.setRowSelectionInterval(rowIndex , rowIndex )

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Points : 130
    Points
    130
    Par défaut
    Dans ce cas, si l'utilisateur fait les modifications directement dans la JTable,
    et que tu es sûr d'avoir opéré les modifications dans la base,
    pourquoi recharger avec les données de la requête ?


    Le problème c'est que l'utilisateur peut changer le nom, et la requête me charge les personnes avec un ordre by sur les nom tu vois ce que je veux dire?

    donc l'élément modifié peut changer l'ordre tu vois?.

  12. #12
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    Certes,

    Techniquement, comme on n'a pas de méthode "find" pour une JTable,
    et que les données sont classées sur le nom,
    alors il ne reste plus que la recherche séquentielle (itération sur la colonne identifiant)

    Cela dit, la JTable comporte-t-elle vraiment plusieurs milliers de lignes ?
    J'ai du mal à imaginer l'utilisateur en train de chercher dans cette quantité de données.

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Points : 130
    Points
    130
    Par défaut
    Pour être plus claire avec toi, il s' agit d'une table qui stocke les patients d'un cabinet médical.

    Sinon coté performance,a partir de quel nombre exactement l'itération peut poser des problèmes?

    Merci d'avance.

  14. #14
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    Cela dépend de la puissance du poste car l'itération se fait en mémoire.
    Sur un poste "moyen" en xp, j'ai limité les résultats à 1000 lignes

    Si l'utilisateur veut trouver le patient "Martin", doit-il faire défiler les noms à la souris
    jusqu'à ce qu'il trouve "Martin" ?

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Points : 130
    Points
    130
    Par défaut
    Non c'est pas ça.

    J'ai une zone de saisie ou je saisie le nom recherché, et je lance la requête de recherche après chaque caractère tapée, (si je tape B j’obtiens les noms qui commencent par B, si je tape Bc j'obtiens les noms commencent par Bc etc...).

    Mais après la modification j'affiche la liste de tout les patients.

    tu vois bien ce que je veux dire?

  16. #16
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    Oui je vois bien.

    Donc ta requête de recherche est de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM MaTable WHERE nom LIKE '" + zone.getText() + "%'"
    Si c'est le cas, au lieu de tout recharger et afin d'avoir le moins de lignes possible à l'écran,
    tu peux réutiliser ta requête et y ajouter le dernier nom modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM MaTable WHERE nom LIKE '" + zone.getText() + "%' OR nom ='" + nomModifié + "'"
    Dans ce cas l'itération ne se fera que sur les quelques lignes à l'écran.

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Points : 130
    Points
    130
    Par défaut
    Oui je te comprends bien.

    Mais il y' a un scénario c'est que l' utilisateur peut chercher un patient après sa sélection dans la table (ci-joint un capture d'écran pour que tu puisses me comprendre mieux).

    Alors les scénarios qu' on a :

    1) rechercher un patient en tapant le nom dans la zone de texte (qui est avant le tableau).
    2) sélectionner un patient depuis la table est accéder à ses informations et les modifier.

    Je penses que la meilleur solution c'est de rechercher le patient modifiée avec un nombre limité des patients (par exemple avec les trois patients d'avant et les deux après) puisque le JTable ne permet d'afficher que 5 patients.Alors c'est mieux de charger seulement 5 non?

    Merci d'avance.
    Images attachées Images attachées  

  18. #18
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    Oui, je pense que c'est bon.

    Pour en revenir au problème que tu poses dans le début du post,
    si tu réussi à avoir un nombre limité de lignes alors
    la recherche de la fiche par itération ne sera pas très longue.

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Points : 130
    Points
    130
    Par défaut
    Donc à ton avis la meilleur solution c'est de ramener un nombre limité des patients?

    car j'utilise mySql et il y' l'option Limite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (SELECT * FROM t_patient LIMIT 0 , 5
    ) limite le résultat à 5.

    Et sincérement je vois comment chercher aprés la modification?je cherche les noms en utilisant cette requête?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM MaTable WHERE nom LIKE '" + zone.getText() + "%' OR nom ='" + nomModifié + "'"
    C'est bien ça?

  20. #20
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    L'option limit de mysql n'est pas la solution car si l'utilisateur tape les 1ère lettres du nom,
    on peut avoir 25 noms concernés mais l'option limit ne renverra que les 5 premiers
    et donc pas forcément celui qui est cherché.

    je suppose que :
    - la zone de recherche (sur l'écran) s'appelle "zone"
    - l'utilisateur ait tapé "MA" dans la zone de recherche
    - il a choisi le patient "MARTIN" et a modifié le nom en "DUPOND" (c'est tout de même pas courant !)

    Alors la requête de rechargement que MySql doit voir arriver sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM t_patient WHERE nom LIKE 'MA%' OR nom ='DUPOND'"
    coté java, il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM t_patient WHERE nom LIKE '" + zone.getText() + "%' OR nom ='" + nomModifié + "'"

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Récupérer l'index d'une ligne de DataTable
    Par zooffy dans le forum ASP.NET
    Réponses: 4
    Dernier message: 06/11/2017, 16h43
  2. Réponses: 1
    Dernier message: 10/04/2010, 07h16
  3. Récupérer les attributs d'une ligne dans un Datagrid
    Par siro1 dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 23/09/2009, 17h29
  4. récupérer l'index d'une ligne d'un gridview
    Par xavpiaf dans le forum ASP.NET
    Réponses: 4
    Dernier message: 17/06/2008, 12h06
  5. Récupérer la valeur d'une ligne dans une procédure stockée
    Par mobscene dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 07/12/2006, 19h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo