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

JDBC Java Discussion :

Actualiser JTable


Sujet :

JDBC Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 44
    Points : 24
    Points
    24
    Par défaut Actualiser JTable
    bonjour,

    J'essaye d'actualiser ma JTable avec un bouton.

    J'ai trois table qui me permettent d'afficher les données de la BDD postgresql et je sais pas ou mettre le nouveau model parmi mes trois table et la syntaxe pour actualiser les données avec la méthodeFireTableDataChanged.

    Je vous donne Mon code MainAfficheClient et j'espère avoir votre aide :
    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
     
    public class MainAfficheClient
    {
      public static void main(String[] args)
      {
        Connection conn = getConnection();
        try
        {
            Statement st = conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE,
                    								   ResultSet.CONCUR_READ_ONLY );
     
            ResultSet rs = st.executeQuery( "SELECT * FROM tabclients" );
            AfficheClient rtm = new AfficheClient( rs );
     
            TablePanel tablePanel = new TablePanel( rtm );
     
            JFrame mainFrame = new JFrame( "Affiche table " );
            mainFrame.add( tablePanel, BorderLayout.CENTER );
            mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
            mainFrame.setSize( 640, 480 );
            mainFrame.setVisible( true );
     
     
        } 
        catch ( SQLException e )
        {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
     
      public static Connection getConnection()
        {
          Connection connection = null;
          boolean ok = false;
     
          //--- chargement en mémoire du pilote
          try
         {
           Class.forName( "org.postgresql.Driver");
           ok = true;
         } 
         catch ( ClassNotFoundException e )
         {
           System.out.println( "ERREUR chargement du pilote: pilote non trouvé" );
           e.printStackTrace();
         }
     
         //--- connexion à la base de données
         if ( ok )
         {
           try
           {
             connection = DriverManager.getConnection( "jdbc:postgresql://localhost:5433/tabclient","postgres","anissa39");
           } 
           catch ( SQLException e )
           {
             System.out.println( "ERREUR de connexion à la base de données: " + 
            		 "jdbc:postgresql://localhost:5433/tabclient" );
             e.printStackTrace();
           }
         }
     
          return connection;
        }
     
    }
    Merci.

  2. #2
    Membre confirmé Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Points : 577
    Points
    577
    Par défaut
    Je ne vois pas d'instanciation de JTable dans ton code. Mais sinon il faut fournir un modèle à tes JTable et tu peux regarder du coté du binding pour synchroniser le contenu de la table avec un liste. Il suffira alors de lancer la requête et de modifier e contenu de la liste dans l'action du bouton pour que cela se mette à jour dans l'interface (et ne pas créer une nouvelle instance de cette liste).

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    Le problème que j'arrive pas à faire un modèle et je vois pas si je dois l'afficher dans ma table AfficheClient :

    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
    public class AfficheClient extends AbstractTableModel{
     
     
     
     
      public AfficheClient( ResultSet resultSet )
      {
        this.resultSet = resultSet;
     
     
     
        try 
        {
          this.resultSetMetaData = resultSet.getMetaData();
        } 
        catch (SQLException e) 
        {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
      private void Actualiser(Object data2, Object column2) {
     
     
    }
     
      public int getColumnCount()
      {
    	try 
        {
          return resultSetMetaData.getColumnCount();
        } 
        catch (SQLException e) 
        {
          // TODO Auto-generated catch block
          e.printStackTrace();
          return 0;
        }
      }
     
      @Override
      public int getRowCount()
      {
    	try
        {
          resultSet.last();
          return resultSet.getRow();
        } 
    	catch (SQLException e)
        {
          // TODO Auto-generated catch block
          e.printStackTrace();
          return 0;
        }
      }
     
      @Override
      public Object getValueAt(int rowIndex, int columnIndex) 
      {
        try
        {
          resultSet.absolute( rowIndex + 1 );
          return resultSet.getObject(columnIndex + 1 );
        } 
        catch (SQLException e)
        {
          // TODO Auto-generated catch block
          e.printStackTrace();
          return null;
        }
      }
     
      public String getColumnName( int column )
      {
        try 
        {
          return resultSetMetaData.getColumnName( column + 1 );
        } 
        catch (SQLException e) 
        {
          // TODO Auto-generated catch block
          e.printStackTrace();
          return "";
        }
      }
     
      private ResultSet resultSet;
      private ResultSetMetaData resultSetMetaData;
     
    }
    Merci .

  4. #4
    Membre confirmé Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Points : 577
    Points
    577
    Par défaut
    Le model (AfficherClient) il a l'air ok.

    Ton TablePanel il vient d'où ? Pourquoi ne pas utilisé un JTable ?
    La y a un How To de base :
    http://download.oracle.com/javase/tu...nts/table.html

    Il te faut un TableModelListener.

  5. #5
    Membre confirmé Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Points : 577
    Points
    577
    Par défaut
    Peut-être que j'ai pas bien compris ton problème mais à priori il n'y a pas de moyen de récupérer les changements en base automatiquement, la base de donnée n'appelle pas le programme, donc il faut typiquement requêter la base de données tous les x secondes.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    Comment peut-on faire pour avoir une actualisation automatique de JTable tous les x secondes?

  7. #7
    Membre confirmé Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Points : 577
    Points
    577
    Par défaut
    Avec un Timer

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    Merci ,je vais essayer avec la class Timer.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    j'arrive pas à avoir un exemple pour mettre un timer pour ma JTable ,vous pouvez me donnez un exemple SVP?

    Merci.

  10. #10
    Membre confirmé Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Points : 577
    Points
    577
    Par défaut
    A partir de la java doc java doc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int delay = 1000; //milliseconds
      ActionListener taskPerformer = new ActionListener() {
          public void actionPerformed(ActionEvent evt) {
             //ICI ON MET A JOUR LA TABLE 
          }
      };
      new Timer(delay, taskPerformer).start();
    Par contre le code est initial est pas terrible il est interessant d'utiliser un objet intermediaire entre le ResultSet et par une List<Client> entre l'AbstractTableModel. Du coup c'est pas mal d'utiliser le DefaultTableModel.
    Enfin sinon que tu change le ResultSet de ton AfficheClient (prévoir un méthode qui fait comme le constucteur) et en suite il suffit de faire un fireTableDataChanged() ça devrait le faire...

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    Merci mais j'arrive pas à comprendre ce que tu veux dire par classe intermédiaire.tu peux donner plus de détails stp?merci.

  12. #12
    Membre confirmé Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Points : 577
    Points
    577
    Par défaut
    Par exemple le DefaultTableModel utilise un dataVector pour stocker les données. Un ResultSet c'est un gros machin qui ouvre une connexion à la base de donnée (il faut pas oublier de le fermer après avoir tout lu sinon ça va pauser un problème).
    Mais bon si tu veux faire vite pourquoi pas, en consultation uniquement, il faut quand même trouver un moyen de faire un close dessus... bref c'est pas conseillé.
    Je pense que le plus simple c'est d'utiliser le DefaultTableModel (au moins c'est un bonne implémentation) et tu lui fourni les data avec le Resulat set.
    Si tu veux refrechir tu refait un requête avec la base et un nouveau resultset qui tu ferme à chaque fois.

Discussions similaires

  1. Actualisation JTable au bout de n entrées
    Par peemoney dans le forum Composants
    Réponses: 12
    Dernier message: 25/09/2012, 18h15
  2. Actualisation JTable Java
    Par benf35 dans le forum Composants
    Réponses: 2
    Dernier message: 17/04/2012, 13h37
  3. Actualisation JTable avec BDD
    Par Mokujil dans le forum Composants
    Réponses: 1
    Dernier message: 27/05/2009, 14h24
  4. Actualiser l'affichage jtable
    Par Blast dans le forum Composants
    Réponses: 6
    Dernier message: 21/04/2006, 17h45
  5. [jTable] Actualiser un tableau
    Par oOoOuuhmAn dans le forum Composants
    Réponses: 7
    Dernier message: 14/03/2006, 18h05

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