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 :

probleme avec un JComboBox et une JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 203
    Par défaut probleme avec un JComboBox et une JTable
    Bonjour,

    Après beaucoup d'essai de bidouillage, je m'en remet à votre savoir

    En résumé,

    j'ai un JComboBox qui contient la liste des établissements (liste situé dans ma base de données)

    j'ai une JTable qui doit me donner des informations concernant l'établissement.

    j'ai un bouton qui me permet de créer un nouvel établissement

    1) lorsque je clique sur l'onglet "établissement", ma JComboBox est par défaut sur le 1er établissement, et donc ma JTable doit afficher les renseignements le concernant.

    2) quand je sélectionne un autre établissement, ma JTable doit m'afficher les renseignements le concernant

    Problème: j'arrive bien à mettre mon établissement par défaut avec les bon renseignement mais je n'arrive pas à changer d'établissement
    J'ai donc changer mon code mais là rien ne marche


    3) quand je clique sur le bouton création un formulaire apparait (ça c'est ok), cale enregistre mes données dans ma base de données (OK) mais quand je ferme ce formulaire et donc que je retourne sur mon onglet établissement, ma liste n'est pas mise à jour

    Voici mon code:

    classe etablissement:
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    public class Etablissement extends JPanel implements ItemListener,ActionListener{
     
        DefaultComboBoxModel listeModel= new DefaultComboBoxModel();
        JComboBox liste;
        JTable table=new JTable();
        TableModel tableur;
         JButton btC=new JButton("Création");
     
    //nom du client afin de le récupérer pour la création d'un établissement (n'apparait pas)
        JTextField tfClient;
    Etablissement(String client)
    {
      super();
      build(client);
    }
     
    private void build(String client)
    {
            tfClient= new JTextField(client);
     
          try {
            BaseDonnees BD=new BaseDonnees();
            ResultSet rst=BD.Ets(client);
            while(rst.next())
               {
                listeModel.addElement(rst.getString("denominationEts"));
                }
         }catch(Exception se) {
                System.out.println("erreur commise est: "+se);
            }
         liste = new JComboBox(listeModel);
         //JCompletionBox.enableAutoCompletion(liste);
         liste.setSelectedIndex(0);
         liste.setMaximumRowCount(5);
         liste.setBounds (550, 120,300,300);
         liste.setBackground(Color.WHITE);
     
     
    //Ecouteur sur la liste et les boutons
      if(liste.getSelectedItem()==client)
      {
          try{
                  BaseDonnees BD=new BaseDonnees();
                  String nomClt=tfClient.getText();
                  ResultSet rst=BD.lireEts1(nomClt);
                  while(rst.next())
                  {
                   String s=rst.getString("denominationEts");
                   table=contenu(s);
                   table.updateUI();
                   revalidate();
                   addFormat(gbc,table, fixStyle, 1, 0);
     
          }
            } catch(Exception se) {
                System.out.println("erreur commise est: "+se);
            }
      }
      else
      {
         liste.addItemListener(this);
      }
     
         btC.addActionListener(this);
         setLayout(new GridBagLayout());
        // Répartition
            addFormat(gbc,liste, fixStyle, 0, 0);
            addFormat(gbc,btC, fixStyle, 2, 1);
     
          }
     
    //Affiche information de l'établissement quand clique dessus
     
    public void itemStateChanged(ItemEvent e) {
           if(e.getStateChange() == ItemEvent.SELECTED)
           {
                                 String s=e.getItem().toString();
                                 table=contenu(s);
                                 table.updateUI();
                                 revalidate();
                                 addFormat(gbc,table, fixStyle, 1, 0);
           }
    }
     
    //Création d'un nouvel établissement
     
    public void actionPerformed(ActionEvent evt){
          Object obj=evt.getSource();
     
        if (obj==btC)
          {
            String nomClt=tfClient.getText();
           CreaEts nouvEts=new CreaEts(nomClt);
          }
     
    }
     
    //Methode contenu: renvoie une JTable avec info de l'établissement
     
    private JTable contenu(String ets)
        {
          String denoEts="";
          String siret="";
     
         try{
     
                  BaseDonnees BD=new BaseDonnees();
                  ResultSet rst=BD.lireEts(ets);
                  while(rst.next())
          {
     
          denoEts=rst.getString("denominationEts");
          siret=rst.getString("siret");
     
          }
            } catch(Exception se) {
                System.out.println("erreur commise est: "+se);
            }
        String[] titreColonnes = { "", ""};
     
       Object[][] données = { { "Dénomination", denoEts },
                                       { "Siret",siret} };
        table=new JTable(données,titreColonnes);
        table.setPreferredSize(new Dimension(700, 300));
        tableur=table.getModel();
        return table;
          }
    J'espère que j'ai bien expliqué mon problème
    merci de votre aide
    claire

  2. #2
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 203
    Par défaut
    Je viens déjà de résoudre une erreur (stupide):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String t=(String)(liste.getSelectedItem());
     
    //Ecouteur sur la liste et les boutons
      if(t.equals(client))
      {
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(liste.getSelectedItem()==client)

    mais quand je change d'établissement, rien ne se passe
    claire

  3. #3
    Membre éprouvé
    Profil pro
    Devops
    Inscrit en
    Août 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Devops

    Informations forums :
    Inscription : Août 2006
    Messages : 107
    Par défaut
    J'ai l'impression en survolant le code que tu crées une nouvelle JTable a chaque fois (au lieu d'ajouter un element a une JTable).

    Ensuite, je ne comprends pas ce qu'il se passe dans la fonction actionPerformed. C'est quoi un CreaEts() ?

    Pourquoi la fonction contenu s'appel comme ça ? Il est super important que les fonctions porte un nom correspondant a leur action !

    (Surtout si tu veux que d'autre personnes puisse relire le code )

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 203
    Par défaut
    - la classe CreaEts est mon formulaire pour créer un nouvel établissement.

    - la méthode contenu() me permet, normalement, de remplir ma JTable

    (excusez moi pour les nom mais ça fait à peine 1 mois que je me suis mis à Java donc j'ai du mal à structurer mon code).

    Je vais regarder si je créée plusieurs fois ma table, et si oui, comment je fais pour seulement changer les données à l'intérieur.

    merci pour ta réponse
    claire

  5. #5
    Membre éprouvé
    Profil pro
    Devops
    Inscrit en
    Août 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Devops

    Informations forums :
    Inscription : Août 2006
    Messages : 107
    Par défaut
    Citation Envoyé par claire13 Voir le message
    Je vais regarder si je créée plusieurs fois ma table, et si oui, comment je fais pour seulement changer les données à l'intérieur.
    Visiblement, oui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table = new JTable(données, titreColonnes);
    Juste une petites discution sur comment structurer le code. Dans les grandes lignes : Il faut penser en terme de modele (la structure de données), la vue (le moyen de représenter cette structure) et le controleur (le moyen d'influencer sur la structure).

    Ici le modele peut etre une liste d'etablissement contenant les informations les concernants.
    La vue est a la fois la table et le jcombobox
    Enfin le controleur est le code permettant d'ajouter un etablissement dans la liste (par l'intermediare d'une autre vue le TextField du nom de l'etablissement ou le fameux CreaEts() mais la je reste encore dans le flou...)

    Déjà, si tu arrives a avoir ces trois parti bien séparer, tu auras simplifié une grande partie du problème.

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 203
    Par défaut
    merci de ta réponse.

    J'ai refait mon code en enlevant l'erreur de la multi création de JTable et en essayant de séparer le model de la vue (j'attaquerais le contrôleur plus tard).

    Voici le nouveau code:

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    public class EtablissementBis extends JPanel implements ItemListener,ActionListener{
    /*************************************************************************/
    //Vue
    /*************************************************************************/
        DefaultComboBoxModel listeModel= new DefaultComboBoxModel();
        JComboBox liste;
        JLabel titre2=new JLabel("Descriptif de l'établissement");
        JTable table;
        Object[][] données;
        TableModel tableur;
        String[] titreColonnes = { "", ""};
        JButton btM=new JButton("Modifier");
        JButton btC=new JButton("Création");
        JButton btS=new JButton("Supprimer");
        BaseDonnees BD=new BaseDonnees();
     
        //nom du client afin de le récupérer pour la création d'un établissement (n'apparait pas)
        JTextField tfClient;
     
     
        GridBagConstraints gbc=new GridBagConstraints();
     
    /*************************************************************************/
    //Constructeur
    /*************************************************************************/
     
    EtablissementBis(String client)
    {
      super();
      build(client);
    }
    /********************************************************************************************************/
    //Model: appel des fonctions contenuTable(string nom établissement) et contenuListe(string nom client)
    /********************************************************************************************************/
     
     
    private void build(String client)
    {
          tfClient= new JTextField(client);
         listeModel=contenuJComboBox(client);
         liste = new JComboBox(listeModel);
         liste.setSelectedIndex(0);
         liste.setMaximumRowCount(5);
         liste.setBounds (550, 120,300,300);
         liste.setBackground(Color.WHITE);
     
     
    //Ecouteur sur la liste et les boutons
         liste.addItemListener(this);
         btC.addActionListener(this);
     
    // Répartition
       setLayout(new GridBagLayout());
       addFormat(gbc,liste, fixStyle, 0, 0);
       addFormat(gbc,btM, fixStyle, 2, 0);
       addFormat(gbc,btC, fixStyle, 2, 1);
       addFormat(gbc,btS, fixStyle, 2, 2);
     
    //si on n'a pas encore sélectionné un établissement, siège sociale (ets 1)par défaut:
    //données = information le concernant
     
    //quand je sélectionne un autre établissement, écouteur sur la liste
    //données =  information concernant le nouvel établissement
       String t=(String)(liste.getSelectedItem());
     
      if(t.equals(client))
      {
          try{
              données=contenuTableau(client);
      } catch(Exception se) {
                        System.out.println("erreur commise est: "+se);
                        }
      }
      table=new JTable(données,titreColonnes);
      table.updateUI();
      revalidate();
      table.setPreferredSize(new Dimension(700, 300));
      tableur=table.getModel();
     
      addFormat(gbc,table, fixStyle, 1, 0);
     
     
          }
    public void itemStateChanged(ItemEvent e) {
           if(e.getStateChange() == ItemEvent.SELECTED)
           {
                                 String s=e.getItem().toString();
                                 données=contenuTableau(s);
           }
    }
     
     
    //donne le contenu de la JTable
        private Object[][] contenuTableau(String ets)
        {
          //String ets="cpa";
          String denoEts="";
          String siege="";
          String adr1="";
          String adr2="";
          String cp="";
          String ville="";
          String siren="";
          String naf="";
          String act="";
          String conv="";
          String eff="";
          String hor="";
          String aff="";
     
     
     
          try{
     
                  BaseDonnees BD=new BaseDonnees();
                  ResultSet rst=BD.lireEts(ets);
                  while(rst.next())
          {
     
          denoEts=rst.getString("denominationEts");
          siege=rst.getString("siegeSocial");
          adr1=rst.getString("adr1Ets");
          adr2=rst.getString("adr2Ets");
          cp=rst.getString("cpEts");
          ville=rst.getString("villeEts");
          siren=rst.getString("sirenEts");
          naf=rst.getString("nafEts");
          act=rst.getString("activiteEts");
          conv=rst.getString("conventionEts");
          eff=rst.getString("effectifEts");
          hor=rst.getString("horaireEts");
          aff=rst.getString("siret");
     
          }
            } catch(Exception se) {
                System.out.println("erreur commise est: "+se);
            }
     
       Object[][] données = { { "Dénomination", denoEts },
                              { "Siège sociale",siege},
                               { "Adresse", adr1 },
                               { "", adr2 },
                               { "Code Postale", cp },
                               { "Ville", ville },
                               { "Numéro SIREN", siren },
                               { "Code NAF(APE)", naf },
                               { "Activité", act },
                               { "Convention Collective", conv },
                               { "Effectif", eff },
                               { "Horaire", hor },
                               { "Siret",aff } };
        return données;
          }
     
    //Donne le contenu de la JComboBox
    private DefaultComboBoxModel contenuJComboBox(String nomClt){
     
      DefaultComboBoxModel model=new DefaultComboBoxModel();
             try {
            ResultSet rst=BD.Ets(nomClt);
            while(rst.next())
               {
                model.addElement(rst.getString("denominationEts"));
                }
         }catch(Exception se) {
                System.out.println("erreur commise est: "+se);
            }
            return model;
    }
    est-ce que le code est plus compréhensible (c'est bien ça le model et la vue, ou pas du tout!)

    Par contre, ça ne marche toujours pas: il y a bien les informations concernant l'établissement 1(sélectionné par défaut), mais rien ne se passe quand je sélectionne un autre établissement

    merci de votre aide
    claire

Discussions similaires

  1. Probleme avec le Renderer d'une JTable
    Par Mike888 dans le forum Composants
    Réponses: 6
    Dernier message: 12/05/2007, 16h50
  2. probleme avec des calculs et une requete de mise a jour
    Par el_quincho dans le forum Access
    Réponses: 2
    Dernier message: 16/03/2006, 10h06
  3. probleme avec l'affichage d'une de mes variables
    Par somatino dans le forum Langage
    Réponses: 12
    Dernier message: 02/03/2006, 15h39
  4. Réponses: 3
    Dernier message: 22/11/2005, 20h42
  5. Réponses: 2
    Dernier message: 10/10/2005, 02h25

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