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 :

JTable:comment associer le modele à la tabe?


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 73
    Par défaut JTable:comment associer le modele à la tabe?
    bonjour tout le monde
    je veux afficher le résultat d'une requéte à une base de données à une JTable.
    j'ai réalisé la classe de connection à la base qui me renvoie toutes les données nécessaires au modèle.
    voici son 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
     
    package test_jdbc;
     
    import java.sql.* ;
    import java.util.* ;
    public class MySqlTest {
     
        private String driver="com.mysql.jdbc.Driver";//"org.gjt.mm.mysql.Driver";
        private String bridge="jdbc:mysql://localhost:3306/";
        private String name ="hicham";
        private Connection con;
        private ResultSetMetaData rsm;
        private ResultSet rs;
        private Statement stmt;
     
        private int nbrCol;
        private int nbrLg;
        private Object valAt;
        private String query;
        private String tableName;
     
     
     
        /** Creates a new instance of MySqlTest */
        public MySqlTest() {
            try{
                Class.forName(driver);
                String url=bridge+name;
                con=DriverManager.getConnection(url,"root","");
                stmt=con.createStatement();
                System.out.println("connection etablie");
     
            }
            catch(ClassNotFoundException e){
                System.out.println("erreur lors du chargement du pilote:"+e);
            }
            catch(SQLException e){
                System.out.println("la connection a échoué :"+e.getMessage());
                while(e != null){
                    System.out.print("Message :"+e.getMessage());
                    System.out.print(", Etat :"+e.getSQLState());
                    System.out.println(", Code :"+e.getErrorCode());
                    e.getNextException();
                }
            }
        }
     
        public int getNbCol(){
            return nbrCol;
        }
     
        public Object getValAt(int row,int col){
            valAt=null;
            testSelect(query,tableName);
            try{
                for(int i=0; i<row;i++) rs.next();
                    valAt=rs.getObject(col);
            }
            catch(SQLException e){
                System.out.println("erreur lors de la récupération de l'élément("+row+","+col+"):"+e.getMessage() );
            }
     
            return valAt;
        }
     
        public ResultSet getResultSet(){
            return rs;
        }
     
         public int getNbLig(){
            nbrLg=0;
            ResultSet rs1=rs;
     
            try{
            while(rs1.next()) nbrLg++;
            }
            catch(SQLException se){}
            return nbrLg;
        }
     
          public String getColumnName(int index){
             String cname=null;
             try{
                if(index>=0 && index<getNbCol())
                    cname=rsm.getColumnName(index);
             }
             catch(SQLException se){}
             return cname;
         }
     
         public String getColumnClassName(int index){
             String cname=null;
             try{
                 if(index>=0 && index<getNbCol())
                    cname=rsm.getColumnClassName(index);
             }
             catch(SQLException se){}
             return cname;
         }
     
     
     
          public void testSelect(String query,String tableName){
                this.query=query;
                this.tableName=tableName;
              try{
                rs=stmt.executeQuery(query);
                //nbrLg = rs.length;
                rsm = rs.getMetaData();
                nbrCol=rsm.getColumnCount();   
            }
            catch(Exception e){
                System.out.println("erreur :"+e.getMessage());
            }
        }
     
          public void close(){
              try{
                  stmt.close();
                  rs.close();
                  con.close();
              }
              catch(SQLException e){}
          }
     
    }

    et dans mon modèle j'instancie cette classe et je définis les méthodes abstraites de AbstractTableModel :
    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
     import java.sql.ResultSet;
    import java.util.Vector;
    import javax.swing.table.AbstractTableModel;
    public class DataTableModel extends AbstractTableModel {
        private MySqlTest mst;
     
       // private Vector data;
        private Vector<String> columnNames;
        private String tableName;
        private String[] headers;
     
        private ResultSet rs;
        private Vector<String[]>  data;
     
     
        /** Creates a new instance of DataTableModel */
        public DataTableModel() {//ajouter un paramètre ResultSet
            mst=new MySqlTest();
            executeSelect("select * from compte","compte");
            rs=mst.getResultSet();
            data=new Vector<String[]>();
            setData();
            System.out.println(getRowCount()+","+getColumnCount());
            System.out.println("l'element 2,3:"+getValueAt(2,3));
            System.out.println("colonne 0:"+getColumnName(1));
            System.out.println("colonne 0 de type:"+getColumnClassName(1));
            for(int i=0; i<data.size(); i++){
                for (int j=0; j<data.get(i).length; j++){
                   System.out.print(data.get(i)[j]+","); 
                }
                System.out.print("\n");
     
            }
        }
     
        public void setData(){
            String[] row;
            row=new String[getColumnCount()];
     
            for(int i=0; i< getRowCount(); i++){
                for(int j=0; j<getColumnCount(); j++){
                    row[j] = getValueAt(i+1,j+1).toString();
                }
                data.add(row);
            }
     
     
        }
     
        /** exécution d'une requéte select */
        public void executeSelect(String query,String table){
            System.out.println("execution de la requéte "+query);
            mst.testSelect(query,table);
        }
     
        /** retourne la valeur d'un champ dans une ligne */
        public Object getValueAt(int rowIndex, int columnIndex) {
            return mst.getValAt(rowIndex,columnIndex);
        }
     
        /** retourne le nombre de ligne en executant un select count(*) */
        public int getRowCount() {
            return mst.getNbLig();
        }
     
        /** retourne le nombre de colonnes de la table */
        public int getColumnCount() {
            return mst.getNbCol();
        }
     
        public String getColumnName(int ind){
            return mst.getColumnName(ind);
        }
     
        public String getColumnClassName(int ind){
            return mst.getColumnClassName(ind);
        }
     
     
     
        public boolean isCellEditable(int row,int col){
            return false;
        }
     
    }
    normalement quand j'associe le modéle à la table ça devrait m'afficher mes données mais c'est pas le cas.voici la classe 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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     public class TestJTable extends javax.swing.JFrame {
        DataTableModel dtm;
        /** Creates new form TestJTable */
        public TestJTable() {
            dtm=new DataTableModel();
            initComponents();
            jTable1.setModel(new DataTableModel());
            //jTable1.createDefaultColumnsFromModel();
            //System.out.println(jTable1.getAutoCreateColumnsFromModel());
        }
     
        /** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
         */
        // <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          
        private void initComponents() {
            dataTable = new javax.swing.JScrollPane();
            jTable1 = new javax.swing.JTable();
     
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            jTable1.setModel(new javax.swing.table.DefaultTableModel(
                new Object [][] {
                    {null, null, null, null},
                    {null, null, null, null},
                    {null, null, null, null},
                    {null, null, null, null}
                },
                new String [] {
                    "Title 1", "Title 2", "Title 3", "Title 4"
                }
            ));
            dataTable.setViewportView(jTable1);
     
            org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(layout.createSequentialGroup()
                    .addContainerGap()
                    .add(dataTable, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 375, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(15, Short.MAX_VALUE))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                    .addContainerGap(14, Short.MAX_VALUE)
                    .add(dataTable, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 275, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap())
            );
            pack();
        }// </editor-fold>                        
     
        /**
         * @param args the command line arguments
         */
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new TestJTable().setVisible(true);
                }[IMG]C:\Documents and Settings\Hicham-PC\Bureau\testJTable.jpg[/IMG]
            });
        }
     
        // Variables declaration - do not modify                     
        private javax.swing.JScrollPane dataTable;
        private javax.swing.JTable jTable1;
        // End of variables declaration                   
     
    }
    est ce que vous pouvez m'indiquer l'erreur?
    merci d'avance.

  2. #2
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    est ce que vous pouvez m'indiquer l'erreur?
    L'erreur c'est de poster un code pareil et de croire que quelqu'un s'amusera à le lire pour te trouver une éventuelle erreur sans savoir où chercher.
    Il y a déjà les balises [ CODE ] à utiliser pour formater le code, c'est un minimum.

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 73
    Par défaut merci natah pour ta remarque...
    je te remercie pour la remarque...mais mon code étatit plutôt destiné à quelqu'un qui sait bien travailler avec une JTable et en connait le principe de travail et de ce fait il saura se positionner par rapport à mon code et il saura d'où vient l'erreur...
    merci encore

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/01/2005, 15h21
  2. [JTable] comment colorer une case
    Par cladsam dans le forum Composants
    Réponses: 12
    Dernier message: 20/01/2005, 08h14
  3. [JTable] Comment rendre seulement toute une
    Par danje dans le forum Composants
    Réponses: 3
    Dernier message: 13/12/2004, 18h18
  4. [ JTable] Comment empêcher l'édition
    Par stailer dans le forum Composants
    Réponses: 3
    Dernier message: 28/04/2004, 10h27
  5. [JTable] Comment ne pas afficher les titres ?
    Par FabienBxl dans le forum Composants
    Réponses: 3
    Dernier message: 08/10/2003, 15h01

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