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 :

Problème avec JTable


Sujet :

Composants Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 28
    Points : 18
    Points
    18
    Par défaut Problème avec JTable
    Bonjour tout le monde!

    Je suis nouveau sur ce forum et je suis également débutant en programmation Java.
    Je viens solliciter votre aide quant à deux problèmes urgents sur le projet auquel je participe.

    Voilà la situation : je dois développer un annuaire informatique permettant entre autres de répertorier toutes les personnes d'une base de données et permettant d'accéder à leurs coordonnées.
    Cet annuaire se présente de la façon suivante: un menu (sous forme de boutons) sur la gauche et le contenu des menus sur la droite (un peu comme sur les sites web quoi).
    Jusque là tout va bien...

    Le premier problème intervient alors ici : afin d'afficher le contenu du menu correspondant au bouton cliqué (accueil, présentation, mot du président, recherche, etc...), je pensais créer des JPanels et lors du clic sur un bouton, j'active le JPanel correspondant et je désactive les autres... Seulement voilà, depuis NetBeans et en mode création graphique (ajout graphique des composants), lorsque je crée un nouveau JPanel, il me décale le précedent ou bien me l'insère dans le précédent.. Or ce que je veux, c'est autant de JPanel parfaitement supperposés qu'il n'y a de boutons dans le menu de gauche! (j'espère que je me fais bien comprendre).

    Ca, c'était pour mon premier problème. Passons maintenant au suivant:

    Dans le menu "Recherche" (le coeur du logiciel), je dois etre en mesure d'afficher les résultats de la recherche (en fonction des critères des combo box) dans une JTable où chaque ligne correspondrait à une personne diférente.... De plus, chaque ligne contiendrait un bouton "détail"" (dernière colonne de la JTable prévue à cet effet) qui, lors d'un simple clic sur ce dernier, ouvrirait une nouvelle fenetre indépendante qui serait en fait une fiche d'identité de la personne concernée.... Sur le principe, tout va bien.

    En pratique, je souhaite donc associer à chaque bouton "détails", l'objet de type "Personne" correspondant à la ligne de résultat de telle sorte que chaque bouton ouvre la fiche d'identité correpondante à l'enregistrement (vous l'aurez compris).
    Or ça, je ne sais pas faire...je sais créer le bouton avec BoutonRenderer et BoutonEditor (que j'ai pas tellement compris le fonctionnement d'ailleurs mais qui m'a permis d'afficher les boutons "details" correctement) mais je n'arrive pas à associer chacun d'entre eux à une Personne différente....dans ma JTable de résultats, tous les boutons "détails" affiche la meme fiche d'identité : celle de la dernière ligne de la JTable..

    Si vous avez ds idées concernants mes deux problèmes, je suis vraiment preneur car cela fait des jours et des jours que je me creuse la tete mais étant donné que je suis débutant en Java et que je suis tout seul sur ce truc, je m'en remets désormais à vous et à votre aide.

    Merci beaucoup.

    Fabien

  2. #2
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Ouf...
    Salut Fabien ^^

    Bon, déjà, il faut être accroché pour arriver à lire ton problème (j'ai hésité à dire roman ) jusqu'au bout
    Pour ton premier problème, est-ce que c'est absolument indispensable que tu fasses des JPanel? Tu pourrais utiliser un JTabbedPane dont tu mettrais les onglets sur le côté gauche ... Ça pourrait être une idée (je te laisse aller consulter la Javadoc sur le sujet : tutoriel JavaDoc sur les TabbedPane )
    En ce qui concerne ton deuxième problème, j'ai pas trop d'idées pour l'instant, mais je vais essayer de m'y pencher dessus ^^

    En espérant t'avoir aidé,

    Gueritarish

    [EDIT : ] Si tu pouvais poster le code concernant ta recherche, pour le deuxième problème, ce serait pas mal ^^

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    lol. oui c'est vrai que c'est un petit roman...lol
    Sinon, ok pr le premier probleme mais pour le second, c'est le plus important et celui qui m'embete le plus....:-(

    Si tu peux m'aider ça serait super cool!!

  4. #4
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    probleme 1 :

    ce que je fais quand j'ai besoin de faire ce genre de chose, c'est mettre un panel vide ( nommer pdivers )la ou ils devront etre.ensuite je fais mes panels dans des classes séparées en utilisant l'editeur.

    Sur un clique de bouton je fais un removeall sur le panneau pdivers. et je créé le panneau qui m'interesse en lui passant les parametres qui m'interesse et je le mets dans le panneau pdivers .


    probleme 2 :

    il faut redefinir le modele de ta table, dans la colonne où est le bouton tu retourne la class Personne. tu dois aussi changer la methode getValueAt du modele pour qu'elle retourne un object de classe Personne.

    Dans le CellEditor du bouton tu dois avoir une methode (je sais plus le nom) qui te passe en parametre un objet (qui serat une instance de Personne). Une fois que tu as cet objet tu n'as plus qu'a l'utiliser dans l'action de ton bouton.

    ps: je n'ai pas d'exemple sous la main, je verrais si j'en trouve un.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    pourquoi au lieu d'avoir un bouton detail par personne n'en met tu pas un qui ouvre la fiche de la personne selectionnee ?? Il est possible de limiter la selection dans la JTable à une ligne. Sinon tu ouvre autant de fiche que de lignes selectionnees...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    En fait, je vous montre mon code tel que je l'avais ecrit....et ceci ne marche pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    public void remplirTable(){
           DefaultTableModel modele = (DefaultTableModel)jTable1.getModel();
           int i=0,j=0;
     
           while (i<resultRecherche.size()){ //resultRecherche est l'ensemble des personnes correspondant à la recherche :D
                Personne p=(Personne)resultRecherche.elementAt(i);
                Object[] liste = new Object[6];
                liste[0] = p.PerNom; 
                liste[1] = p.PerPrenom; 
                liste[2] = p.PerPromotion; 
                liste[3] = p.SiteEcole; 
                liste[4] = p.NomCommercial;
                liste[5] = "détails";
     
                TableColumnModel tcm = jTable1.getColumnModel();
                TableColumn tc = tcm.getColumn(5);
                tc.setCellRenderer(new ButtonRenderer());
                tc.setCellEditor(new ButtonEditor(new JCheckBox(),p));
     
     
                modele.addRow(liste); 
                i++;
     
     
     
            }  
        }
    ce qui se passe avec ce code, c'est que je veux afficher les boutons "details" dans la 6eme colonne (TableColumn tc = tcm.getColumn(5)).
    Mais ce que fait ce code, c'est qu'il ecrase TOUS les boutons details de la colonne et les remplace par le meme : celui correspondant à la dernière ligne....
    En fait, dans toute la colonne 6, il crée le meme bouton ouvrant la meme fiche.
    J'espère que je me fais bien comprendre...

    Concernant ma classe Bouton Editor, la voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    public class ButtonEditor extends DefaultCellEditor {
     
        JTable laTable;
        Personne pers;
     
        protected BoutonFiche button;  
        private String    label;  
        private boolean   isPushed;   
     
        public ButtonEditor(JCheckBox checkBox, Personne p) {    
            super(checkBox);
            pers=p;
            System.out.println(p.PerPrenom);
            button = new BoutonFiche(pers);
            button.setOpaque(true);
            button.addActionListener(new ActionListener() {      
                public void actionPerformed(ActionEvent e) {                
     
                    FicheIdentite f=new FicheIdentite(pers);
                    String title="Fiche de "+pers.PerPrenom+" "+pers.PerNom;
                    f.setTitle(title);
                    f.setVisible(true);
                    fireEditingStopped();      
                }    
            });
     
        }   
     
        public Component getTableCellEditorComponent(JTable table, Object value,                   
                boolean isSelected, int row, int column) {
            if (isSelected) {      
                button.setForeground(table.getSelectionForeground());      
                button.setBackground(table.getSelectionBackground());    
            } else{      
                button.setForeground(table.getForeground());      
                button.setBackground(table.getBackground());    
            }    
            label = (value ==null) ? "" : value.toString();    
            button.setText( label );    
            isPushed = true;    
            return button;  
        }   
     
        public Object getCellEditorValue() {    
            if (isPushed)  { 
            System.out.println(button.pers.PerPrenom);
            }    
            isPushed = false;    
            return new String( label ) ;  
        }     
     
        public boolean stopCellEditing() {    
            isPushed = false;    
            return super.stopCellEditing();  
        }   
     
        protected void fireEditingStopped() {    
            super.fireEditingStopped();  
        }
     
     
    }

Discussions similaires

  1. Problème avec JTable
    Par reeda dans le forum Composants
    Réponses: 5
    Dernier message: 03/10/2008, 18h06
  2. Problème avec Jtable
    Par @yoyo dans le forum Composants
    Réponses: 4
    Dernier message: 22/03/2006, 15h51
  3. problème avec Jtable
    Par magic001 dans le forum Composants
    Réponses: 6
    Dernier message: 15/03/2006, 23h49

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