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 :

pb d'affichage avec JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de bandit_debutant
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Par défaut pb d'affichage avec JTable
    Bonjour,

    j'espère que cette fois vous pourrez me donner des pistes de travail au lieu de m'envoyer regarder la doc...
    J'ai une JTable qui devrait afficher quattre colonnes avec "Prénom", "Nom", "Age" et "Clé Primaire", et des données récupérées d'une base de données. Au lieu de ça j'obtiens une fenêtre avec 4 colonnes (A,B,C,D) et des cellules vides. Je poste le code des classes concernées.

    Modèle de JTable:
    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
     
    package TableModel;
     
    import java.util.ArrayList;
    import javax.swing.table.*;
     
    /**
     *
     * @author mve
     */
    public class MyTableModel extends AbstractTableModel{
     
        protected String [] nomColonnes;
        protected ArrayList tableau;
     
        //constructeur
        public MyTableModel(String [] nomColonnes, ArrayList tableau)
        {
            this.nomColonnes=nomColonnes;
            majDonnees(tableau);
        }
     
        public void majDonnees(ArrayList nouvellesDonnees)
        {
            this.tableau=nouvellesDonnees;
            fireTableDataChanged();
        }
     
        public int getRowCount()
        {
            return tableau.size();
        }
     
        public int getColumnCount() 
        {
            return nomColonnes.length;
        }
     
        public Object getValueAt(int row, int column)
        {
            return ((ArrayList)tableau.get(row)).get(column);
        }
     
     
        @Override
        public Class getColumnClass(int c)
        {
            return getValueAt(0,c).getClass();
        }
     
        @Override
        public boolean isCellEditable(int rox, int col){
            return false;//les données sont seulement consultables
        }
     
    }
    et voici pour la classe qui doit afficher la fenêtre:

    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
     
    package TableModel;
     
    import com.mysql.jdbc.ResultSetMetaData;
    import dataAccessLayer.PersonneFactory;
    import javax.swing.*;
    import java.awt.*;
    import java.util.ArrayList;
    import sql.ConnectionString;
     
    class FenetreAvecTable extends JFrame {
        protected Object pFactory;
        protected ResultSetMetaData resultatmd;
     
        public FenetreAvecTable() throws Exception{
     
            setTitle("PERSONNES");
            setSize(600, 500);
            setLocationRelativeTo(null);
            setResizable(true);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            PersonneFactory persFactory= new PersonneFactory(new ConnectionString("jdbc:mysql://localhost/personnes", "root", "movesu"));
            String [] titres = {"Prénom","Nom","Age","Clé Primaire"};
            ArrayList tab = persFactory.List();
            MyTableModel monmodele = new MyTableModel(titres,tab);
            JTable monTableau = new JTable(monmodele);
            JScrollPane scrollPane = new JScrollPane(monTableau);
     
            getContentPane().setLayout(new BorderLayout());
            getContentPane().add(scrollPane);
     
        }
     
        public static void main (String [] args) throws Exception{
        FenetreAvecTable fenetre = new FenetreAvecTable();
        fenetre.setVisible(true);
     
    }
    }
    Le message d'erreur affiché est le suivant:
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.util.ArrayList

    Comment faire de mon ArrayList un String pour qu'il s'affiche. J'ai essayé la méthode goString() sans succès, mais je crois que je n'ai pas su m'en servir;
    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Par défaut
    Essayes de déclarer ton ArrayList comme ça
    ArrayList <String> tab = new ArrayList<String>();
    puis tu écris:
    tab=persFactory.List();

  3. #3
    Membre confirmé Avatar de bandit_debutant
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Par défaut
    Citation Envoyé par choko83 Voir le message
    Essayes de déclarer ton ArrayList comme ça
    ArrayList <String> tab = new ArrayList<String>();
    puis tu écris:
    tab=persFactory.List();
    j'obtiens toujours le même résultat. Je vais essayer en changeant le constructeur de mon modèle.
    Merci pour la réponse

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Par défaut
    Dans ta classe TableModel tu declares aussi ton ArrayList comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected <String>ArrayList tableau;

  5. #5
    Membre confirmé Avatar de bandit_debutant
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Par défaut
    Citation Envoyé par choko83 Voir le message
    Dans ta classe TableModel tu declares aussi ton ArrayList comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected <String>ArrayList tableau;
    Merci encore. maintenant le problème se situe à ce niveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     public Object getValueAt(int row, int column)
        {
            return ((ArrayList<String>)tableau.get(row)).get(column);
        }

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Par défaut
    Citation Envoyé par bandit_debutant Voir le message
    Merci encore. maintenant le problème se situe à ce niveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     public Object getValueAt(int row, int column)
        {
            return ((ArrayList<String>)tableau.get(row)).get(column);
        }
    Tu n'utilise le cast <String> qu'au moment de la déclaration de ton ArrayList car ton tableau est déjà déclaré comme ArrayList, donc tu essayes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public Object getValueAt(int row, int column)
        {
            return (tableau.get(row)).get(column)).toString;
        }
    Mais pourquoi ta méthode doit retourner un Object, pourquoi pas une String?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme affichage avec jtable
    Par lamine1987 dans le forum Composants
    Réponses: 4
    Dernier message: 03/08/2009, 02h26
  2. probleme d'affichage avec JTable et JScrollPane
    Par semaj_james dans le forum Composants
    Réponses: 2
    Dernier message: 16/11/2007, 17h09
  3. affichage des données avec jtable
    Par sabrinabest dans le forum Composants
    Réponses: 1
    Dernier message: 23/09/2007, 08h59
  4. Problème d'affichage avec le composant JTable
    Par vidocq dans le forum Composants
    Réponses: 2
    Dernier message: 03/04/2006, 11h22
  5. [JTable]Affichage avec un modèle dynamique impossible
    Par leminipouce dans le forum Composants
    Réponses: 4
    Dernier message: 07/02/2006, 19h42

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