Raffraichissment d'une jtable a partir d'une base oracle [Résolu]

Messages postés
4
Date d'inscription
samedi 2 décembre 2000
Statut
Membre
Dernière intervention
10 mai 2008
- - Dernière réponse : sancha2010
Messages postés
6
Date d'inscription
vendredi 5 novembre 2010
Statut
Membre
Dernière intervention
22 décembre 2011
- 6 nov. 2010 à 01:17
Salut a tous. voila que ca fait 2 jrs ke je galere avec ce prob..

je vous explique, je developpe une interface swing qui doit afficher des enregistrement d'une base oracle dans une jtable.

L'affichage doit s'effectuer suite a un action performed d'un boutton
(pour pouvoir recuperer les criteres de la recherche dans une requete
sql) et le raffraichissment de la jtable doit etre automatique (si de
nouveaux enregistrement sont effectué au niveau de la base ils doivent
etre affichés). La methode ke g developpé fonctionne correctement: elle
recherche les enregistrement et raffraichit la table, ceci est faisable
si cette methode est appelé ds le void main, mais si j l'appelle dans
l'evenement action performed du boutton(pour pouvoir specifier les
criteres de recherche) l'execution se bloque et j n recois mem pa
d'erreur.

Merci
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
4
Date d'inscription
samedi 2 décembre 2000
Statut
Membre
Dernière intervention
10 mai 2008
3
Merci
Le probleme est résolu.C'eait une betise dans le threading.
Le conflit residait dans le thread du main qui ne gerait pa le raffraichissement.
La solution est de creer une classe qui etend Thread et d'implementer le raffraichissement ds la fonction run(); et puis faire appel a ce thread ds le ActionPerformed du boutton.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 140 internautes nous ont dit merci ce mois-ci

Commenter la réponse de amin666
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
30
0
Merci
Salut:

Le sujet est un peu vague.

Est ce que tu as utilisé DefaultTableModel ou bien tu as étendu la classe AbstractTableModel?
Commenter la réponse de Ombitious_Developper
Messages postés
4
Date d'inscription
samedi 2 décembre 2000
Statut
Membre
Dernière intervention
10 mai 2008
0
Merci
Merci pr la reponse.
En fait j'ai crée un modele qui etends AbstractTableModel.voici un exemple qui illustre le probleme.

import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.Rectangle;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import oracle.jdbc.pool.OracleDataSource;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class test extends JFrame {

    private static final long serialVersionUID = 1L;
    private JPanel jContentPane = null;
    private JScrollPane jScrollPane = null;
    private static JTable jTable = null;
    private static JButton jButton = null;
    private static String req="select * from emp"; 

    /**
     * This method initializes jScrollPane   
     *    
     * @return javax.swing.JScrollPane   
     */
    private JScrollPane getJScrollPane() {
        if (jScrollPane == null) {
            jScrollPane = new JScrollPane();
            jScrollPane.setBounds(new Rectangle(0, 80, 637, 84));
            jScrollPane.setViewportView(getJTable());
        }
        return jScrollPane;
    }

    /**
     * This method initializes jTable   
     *    
     * @return javax.swing.JTable   
     */
    private JTable getJTable() {
        if (jTable == null) {
            jTable = new JTable();
            jTable.setSize(new Dimension(581, 260));
        }
        return jTable;
    }

    /**
     * This method initializes jButton   
     *    
     * @return javax.swing.JButton   
     */
    private JButton getJButton() {
        if (jButton == null) {
            jButton = new JButton();
            jButton.setBounds(new Rectangle(99, 20, 91, 26));
            jButton.setText("Rechercher");
           
           
           
        }
        return jButton;
    }

//ici la methode qui effectue la recherche et le raffraichissement
    public static void rechercher(){
        try{
           
            Dbmanager d = new Dbmanager();  //Dbmanager est une classe qui contient les methode relatives a la base (connexion, execution des requete...)
             d.connect("database", "user", "password");
               MonTableModel m = new MonTableModel(d.ColNames(d.getQuery(req)),d.donnee(d.getQuery(req))); //MonTableModel  est la classe qui etends abstract table model
              jTable.setModel(m);
                 while(true){
                  m.majDonnees(d.donnee(d.getQuery(req)));
                                     
                               
                try {
             Thread.sleep(2000);
                  }catch(InterruptedException ie){}  
                           }
             }catch(Exception et){et.printStackTrace();}
    }

    public static void main(String[] args) {
        new test();
rechercher();// la methode placé ainsi ds la main fonctionnecorrectement mais elle fonctionne dés le demarrage de l'application et j n peu pa modifier les criteres de recherche
      
      
    }

    /**
     * This is the default constructor
     */
    public test() {
        super();
        initialize();
       
    }

   
    private void initialize() {
        this.setSize(300, 200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setContentPane(getJContentPane());
        this.setTitle("JFrame");
        this.setVisible(true);
               
    }

    /**
     * This method initializes jContentPane
     *
     * @return javax.swing.JPanel
     */
    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(null);
            jContentPane.add(getJScrollPane(), null);
            jContentPane.add(getJButton(), null);
        }
        return jContentPane;
    }
}

Maintenant si j'elimine l'appel de la methode rechercher du main (et je suupprime l'attribut statique) et que je l'appelle dans un action performed du boutton jButton, l'execution se bloque et je n recoi mem pa de message d'erreur
Voici le code bloquant

.import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.Rectangle;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import oracle.jdbc.pool.OracleDataSource;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class test extends JFrame {

    private static final long serialVersionUID = 1L;
    private JPanel jContentPane = null;
    private JScrollPane jScrollPane = null;
    private static JTable jTable = null;  //  @jve:decl-index=0:visual-constraint="10,220"
    private static JButton jButton = null;
    private static String req="select * from emp";  //  @jve:decl-index=0:
//private static boolean rech=false;
    /**
     * This method initializes jScrollPane   
     *    
     * @return javax.swing.JScrollPane   
     */
    private JScrollPane getJScrollPane() {
        if (jScrollPane == null) {
            jScrollPane = new JScrollPane();
            jScrollPane.setBounds(new Rectangle(0, 80, 637, 84));
            jScrollPane.setViewportView(getJTable());
        }
        return jScrollPane;
    }

    /**
     * This method initializes jTable   
     *    
     * @return javax.swing.JTable   
     */
    private JTable getJTable() {
        if (jTable == null) {
            jTable = new JTable();
            jTable.setSize(new Dimension(581, 260));
        }
        return jTable;
    }

    /**
     * This method initializes jButton   
     *    
     * @return javax.swing.JButton   
     */
    private JButton getJButton() {
        if (jButton == null) {
            jButton = new JButton();
            jButton.setBounds(new Rectangle(99, 20, 91, 26));
            jButton.setText("Rechercher");
            jButton.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
req="select ename from emp"    ;
rechercher();} // ajout d'un action performed qui me permet d'afficher la jtable suivant un nouveau critere de recherche et empeche la recherche des le demarrage de l'application
            });
           
           
           
        }
        return jButton;
    }

    public void rechercher(){
        try{
           
            Dbmanager d = new Dbmanager();
             d.connect("pfe", "sysman", "password");
               MonTableModel m =new MonTableModel(d.ColNames(d.getQuery(req)),d.donnee(d.getQuery(req)));
              jTable.setModel(m);
                 while(true){
                  m.majDonnees(d.donnee(d.getQuery(req)));
                                     
                               
                try {
             Thread.sleep(2000);
                  }catch(InterruptedException ie){}  
                           }
             }catch(Exception et){et.printStackTrace();}
    }
    public static void main(String[] args) {
        new test();
      
      
    }

    /**
     * This is the default constructor
     */
    public test() {
        super();
        initialize();
       
    }

   
    private void initialize() {
        this.setSize(300, 200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setContentPane(getJContentPane());
        this.setTitle("JFrame");
        this.setVisible(true);
       
       
    }

    /**
     * This method initializes jContentPane
     *
     * @return javax.swing.JPanel
     */
    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(null);
            jContentPane.add(getJScrollPane(), null);
            jContentPane.add(getJButton(), null);
        }
        return jContentPane;
    }

   

}

J'espere que j vous ai eclairci le prob, merci encore
Crdlt
Commenter la réponse de amin666
Messages postés
6
Date d'inscription
vendredi 5 novembre 2010
Statut
Membre
Dernière intervention
22 décembre 2011
0
Merci
j'ai besoin du correction de votre code ...si vous pouvez l'envoyer je vais être herseuse
Commenter la réponse de sancha2010