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 :

prob avec un jtable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2006
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 389
    Par défaut prob avec un jtable
    Slt

    Je souhaiterai utilisé un jtable pour affcher le resultat d'une requete
    Le problème c'est que sa fonctionne pas

    Voila mon 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
    void connection() throws SQLException{
     
    	try {
    		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    		Connection con;
    		con = DriverManager.getConnection("jdbc:odbc:infirmerie", "", "");
    		Statement requete = con.createStatement();
    	requete.executeQuery("select nom from employes");
    	getJTable().setModel((TableModel) requete);
     
     
    	} catch (ClassNotFoundException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	} finally {
    	} 
     
     
    }
     
     
     
    	/**
             * This is the default constructor
             */
    	public ListSalarie() {
    		super();
    		initialize();
    		try {
    			connection();
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
     
    	/**
             * This method initializes this
             * 
             * @return void
             */
    	private void initialize() {
    		this.setSize(538, 200);
    		this.setBackground(new Color(184, 207, 229));
    		this.setLayout(null);
    		this.add(getJScrollPane(), null);
    	}
     
    	/**
             * This method initializes jScrollPane  
             *      
             * @return javax.swing.JScrollPane      
             */
    	private JScrollPane getJScrollPane() {
    		if (jScrollPane == null) {
    			jScrollPane = new JScrollPane();
    			jScrollPane.setBounds(new Rectangle(29, 11, 479, 183));
    			jScrollPane.setViewportView(getJTable());
    		}
    		return jScrollPane;
    	}
     
    	/**
             * This method initializes jTable       
             *      
             * @return javax.swing.JTable   
             */
    	public JTable getJTable() {
    		if (jTable == null) {
    			jTable = new JTable();
    		}
    		return jTable;
    	}
    et voila le message d'erreur :

    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: sun.jdbc.odbc.JdbcOdbcStatement cannot be cast to javax.swing.table.TableModel
    at ListSalarie.connection(ListSalarie.java:31)
    at ListSalarie.<init>(ListSalarie.java:52)
    at FenPrincipale.getListSalarie1(FenPrincipale.java:124)
    at FenPrincipale.getOngSalarie(FenPrincipale.java:85)
    at FenPrincipale.getJTabbedPane(FenPrincipale.java:69)
    at FenPrincipale.getJContentPane(FenPrincipale.java:170)
    at FenPrincipale.getJFrame(FenPrincipale.java:155)
    at FenPrincipale.access$0(FenPrincipale.java:148)
    at FenPrincipale$1.run(FenPrincipale.java:138)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

    Pouvez vous m'aider car je suis un peu perdu la

    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2006
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 389
    Par défaut
    Je viens de faire des essais, donc ma requete fonctionne bien il ne me reste plus qu'à l'afficher dans ma jtable.

    Apres avoir lu la javadoc j'ai bien compris son fonctionnement mais c'est en données dures et moi je cherche à afficher le resultat d'une requête.

    Pouvez vous m'indiquez comment on fait pour alimenter une jtable avec une requete ?

    Merci

  3. #3
    Membre expérimenté Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Par défaut
    Salut,

    la ligne suivante retourne un objet ResultSet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ResultSet rs = requete.executeQuery("select nom from employes ");
    que tu doit utiliser pour récupérer les données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    while(rs.next()) // tant qu'il exsite une ligne de resultat:
               {
                  // on récupère la colonne 1:   
                  System.out.println(rs.getString(1));
     
                // on compte les colonnes en commençant par 1 et non par 0
               }
    La ligne suivante déclenche une exception parce que un Statement n'est pas un TableModel ! :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getJTable().setModel((TableModel) requete);
    Tu dois créer ton propre TableModel (en se servant de l'objet ResultSet pour les données) pour ta table.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2006
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 389
    Par défaut
    re et merci pour ta reponse

    donc si j'ai bien compris il aut que j'utlise sa:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    while(rs.next()) // tant qu'il exsite une ligne de resultat:
               {
                  // on récupère la colonne 1:   
                  System.out.println(rs.getString(1));
     
                // on compte les colonnes en commençant par 1 et non par 0
               }
    Sa c'est bon je connais par contre tu peux me dire comment on fait avec un TableModel ?
    Pour l'inscrire dans un Jtable c'est bien Jtable.setModel(TableModel) ?

    Merci

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2006
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 389
    Par défaut
    voila apres des recherches dans la javadoc j'ai trouvé sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Object[][] data = {
        {"Mary", "Campione",
         "Snowboarding", new Integer(5), new Boolean(false)},
        {"Alison", "Huml",
         "Rowing", new Integer(3), new Boolean(true)},
        {"Kathy", "Walrath",
         "Knitting", new Integer(2), new Boolean(false)},
        {"Sharon", "Zakhour",
         "Speed reading", new Integer(20), new Boolean(true)},
        {"Philip", "Milne",
         "Pool", new Integer(10), new Boolean(false)}
    };
    Donc c'est comme cela que l'on alimente une jtable avec des données
    Par contre moi je souhaiterais alimenter data par le resultat d'une requete
    Tu peux me dire coment on fait ?

    Merci

  6. #6
    Membre expérimenté Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Par défaut
    Salut,
    Un TableModel définit quelques méthodes utiles qui seront appelées par JTable. exp:
    getColumnCount pour connaitre le nombre de colonnes à dessiner.
    getColumnName(int columnIndex) pour le nom de la colonne.
    ...
    Pour connaitre la valeur à afficher dans une cellule, JTable se sert de la méthode getValueAt(int row, int Column).

    Exemple d'implémentation:

    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
     
    MyTableModel extends AbstractTableModel{
     
      ....
     
    private final Object[][] data = {
        {"Mary", "Campione",
         "Snowboarding", new Integer(5), new Boolean(false)},
        {"Alison", "Huml",
         "Rowing", new Integer(3), new Boolean(true)},
        {"Kathy", "Walrath",
         "Knitting", new Integer(2), new Boolean(false)},
        {"Sharon", "Zakhour",
         "Speed reading", new Integer(20), new Boolean(true)},
        {"Philip", "Milne",
         "Pool", new Integer(10), new Boolean(false)}
    }; 
     
    ....
     
    public Object getValueAt(int row, int Column){
      return data[row][column];
    }
     
    }
     
     
     
    ....
    TableModel model = new MyTableModel();
    JTable table = new JTable(model);
    Pour ton problème, tu as déjà les données dans le ResultSet que la méthode getValueAt peut s'en servir pour retourner les données:

    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
     MyTableModel extends AbstractTableModel{
     
    private ResultSet rs;
     
    public MyTableModel(ResultSet rs){
      this.rs = rs;
    }
     
     
     ....
    // la methode getValueAt devient:
     
    public Object getValueAt(int row, int column){
    try{
          // on déplace vers la ligne row + 1:
      rs.absolute(row + 1);
         // et on retourne la valeur de la colonne:
      return rs.getObject( column + 1);
     
    } catch(SQLException){ return null;}
     
    }
     
     }
    Note: cette solution marche uniquement si la base de données supporte les curseurs déroulant (Scrolling ResultSet) c'est à dire qui accepte des operations telles que absolute et previous. Si c'est le cas il convient de construire l'objet Statement ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Statement stmt = con.createStatement(
                        ResultSet.TYPE_SCROLL_INSENSITIVE,
                        ResultSet.CONCUR_UPDATABLE);

    voir la doc pour plus d'informations sur ces paramètres.

    Dans le cas contraire il faut récupérer les données du ResultSet et les stocker dans un ArrayList ou Vector par exemple.

Discussions similaires

  1. [débutant] Prob avec Tree ctrl
    Par Devether dans le forum MFC
    Réponses: 3
    Dernier message: 24/03/2004, 11h36
  2. [composant][MX_2004_pro] prob avec scrollpane
    Par scorpiwolf dans le forum Flash
    Réponses: 6
    Dernier message: 12/01/2004, 20h18
  3. Prob avec dates delphi
    Par ericmart dans le forum ASP
    Réponses: 6
    Dernier message: 20/10/2003, 17h51
  4. prob avec utilisation de package
    Par martijan dans le forum Modules
    Réponses: 13
    Dernier message: 11/07/2003, 09h37
  5. Thread probs avec WaitFor()
    Par pixelrock dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/11/2002, 09h40

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