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 :

Reconstruire le modele de ma Jtable (rafraichir ) apres re-changement data[][]


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2011
    Messages : 11
    Par défaut Reconstruire le modele de ma Jtable (rafraichir ) apres re-changement data[][]
    Bonjour

    ca fait 2 jours que je galere avec Jtable pour le rafraichir , j'ai trouver enormement de poste sur la question j'ai presque tout essayer mais il semblerai que ca ne soit pas adequat a ce que je veux faire.

    Je vous explique :

    1 - Je recupere mesData d'une classe Catalogue qui me retourne Object[][] ( Contient tout les donnees des produits ) Jusqu'a maintenant tout vas bien

    Liste de mes produits
    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
          //1 : recuperer les donnees de la table produit
    	private List<Object> requestProduit(String marque){
    		String query = null;
    		
    		if( marque != null) { query = "WHERE id_mrk="+marque+"";}else{ query ="";}
    		Connection connect = maSession;
            ResultSet listing = null;
            
    		try {
    			String requete = "SELECT * FROM Produit "+query+" ORDER BY id_prod"; //LA REQUETE CHANGE EN FONCTION DES PARAMETRES PASSER ICI IL SAGIT D'UN PARAMETRE RECUPERER PAR Jcombobox
    
    			//System.out.println(requete);
    			Statement stmt = connect.createStatement();
    			listing =stmt.executeQuery(requete);
    			
    			List<Object> arrayproduit = new ArrayList<Object>();
    			arrayproduit.clear();
    			
    			while(listing.next())
    			{
    			  List<Object> produit = new ArrayList<Object>();
    			  produit.add(listing.getString(1)); 
    			  produit.add(listing.getString(2));
    			  produit.add(listing.getString(3)); 
    			  produit.add(listing.getString(5));
    			  arrayproduit.add(produit);
    			  	
    			}
    			//log.info("Recuperation des produits catalogues");
    			return arrayproduit;
    		} catch (SQLException e) {
    			log.error("Erreur de requete SQL !");
    
    		}
    		
    		return null;
    		
    	}
    Construire mon data object a partir de la liste
    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
     
    //2 : Construire mon data object
     
    	public Object[][] Catalogue(String mark){
     
    		     List<Object> listingProd = null; 
    			 listingProd = requestProduit(mark);
     
    			 int nbrligne = listingProd.size();
     
    			 Object[][] data = new Object[nbrligne][4];
     
    			  for(int j =0; j< nbrligne; j++) {
     
    				List<Object> produit = (List<Object>) listingProd.get(j);
     
    				for(int k = 0; k< 4; k++) {
     
    					 data[j][k] = produit.get(k);
    					//System.out.println("Ma Jtable DATA : ["+j+"]["+k+"] = "+produit.get(k)+"\n");
    					 //log.debug("Ma Jtable DATA : ["+j+"]["+k+"] = "+produit.get(k)+"\n");
    			      }
     
    			  } 
     
    			  return data;
    	}

    2 -par la suite dans une autre classe je cree ma Jtable pour l'afficher

    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
    private void maJtableCatalogue(){
    	  
    		matable = new JTable(){
    			private static final long serialVersionUID = 1L;
                public boolean isCellEditable(int rowIndex, int colIndex) {return false;}
    		};
    		matable.getModel().addTableModelListener(matable);
    		matable.setRowHeight(25);
    		matable.addMouseListener(new java.awt.event.MouseAdapter(){
    				public void mouseClicked(java.awt.event.MouseEvent e){
    					            DetailProduit fichetech = null;
    				  				int row= matable.rowAtPoint(e.getPoint());
    				  				int produit = Integer.parseInt(matable.getValueAt(row,0).toString());
    				  				fichetech = new DetailProduit(produit);
    				  				fichetech.setLocationRelativeTo(null);
    				}
    		});
    	
    		 String[] entetes = {"N", "Ref","Produit", "Prix"};
    		 Catalogue call = new Catalogue();
    		 Object[][] mesData = call.Catalogue(value);
    		 //System.out.println(mesData[0][1]+" "+mesData[0][2]+" "+mesData[0][3]);
    		 matable.setBounds(12, 12, 935, 355);
    		 matable.setCellEditor(null);
            
    	     modele = new DefaultTableModel(mesData, entetes); 	 
    	     modele.fireTableDataChanged();
    		 matable.setModel(modele); 
    
    		 //Pour Option trier ma table
    		 trier = new TableRowSorter<TableModel>(matable.getModel());
    		 matable.setRowSorter(trier);
    		 
    		  DefaultTableColumnModel colModel = (DefaultTableColumnModel) matable.getColumnModel();
     	      TableColumn nomprod = colModel.getColumn(2);
     	      TableColumn indexprod = colModel.getColumn(1);
     	      int width1=500;
     	      int width2=50;
     	      nomprod.setPreferredWidth(width1);
     	      indexprod.setPreferredWidth(width2);
    
     	     System.out.println("Nombre de ligne recuperer = "+modele.getRowCount());
    	}
    sur le dernier Code

    J'ai verifier et Object mesData change a chaque fois que je choisi un element de Jcombobox en derniere ligne il me donne le bon nombre de ligne recuperer depuis ma BDD

    En rouge : la construction de ma Jtable ( marche tres bien )

    le Probleme est que ma Jtable ne se rafraichie par apres rechargement des data , j'ai pas su reconstruire mon MODEL modele.fireTableDataChanged(); ne marche pas

    C'est vraiment Urgent je dois deposer ce projet demain matin

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Par défaut
    Tu pourrais poster ta classe où tu définis maJtableCatalogue() ? (en élaguant bien entendu tous les trucs inutiles).
    Là j'ai du mal à voir ce que tu veux faire...

    D'après ce que j'ai compris tu reconstruis complètement ta table (appel de maJtableCatalogue) lorsque tes données changent ?



    Si ça peut t'aider, très schématiquement moi je fonctionne comme ça :

    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
    public class monPanel extends JPanel {
     
    JTable maJtable;
    MonModèleDeTable modèle;
     
        // Quand je reçois mes données pour la première fois j'exécute :
        public void construireTable(Données données){
     
        modèle = new MonModèleDeTable(données);
        maJtable = new JTable(modèle);
        //Tu fais toute la mise en forme que tu veux sur ta JTable
        this.setViewportView(maJTable);
        }
     
        // Fonction que tu appeles pour mettre à jour ton tableau
        public void MiseAJour(Data tesDonnées){
     
        ... //Tes éventuels traitements
        modèle.taMéthodeQuiModifieLesDatas(tesDonnées) ;
        }
     
    }



    et en fait le rafraichissement est géré par ton modèle :

    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
    class MyTableModel extends AbstractTableModel {
     
    private Object[][] data = ...
    //(Personnellement je fonctionne plutôt avec des List)
     
     
       ..... // Les 3 ou 4 méthodes basiques à implémenter    
     
     
        public void taMéthodeQuiModifieLesDatas(Data tesDonnées) {
            // Tu mets à jour tes data PUIS
            fireTableCellUpdated(row, col);
        // Ou
        fireTableDataChanged();
        //Ou un autre encore, ça dépend si tu rafraichis tout, juste une ligne, juste une cellule, ect...
        }
        ...
     
     
    }

    Donc quand tu recharges tes Data, tu mets à jour le modèle en lui passant tes données à taMéthodeQuiModifieLesDatas().
    Et c'est elle qui met à jour ta vue.

    Bon j'ai pas forcément été très clair...

Discussions similaires

  1. Rafraichir après un changement de toggle Button
    Par Antichoc dans le forum Android
    Réponses: 1
    Dernier message: 15/07/2011, 13h59
  2. [JTable] addRow() apres la derniere ligne
    Par Nico66 dans le forum Composants
    Réponses: 4
    Dernier message: 19/05/2005, 16h04
  3. [JTable] problème après suppression d'une ligne
    Par fredo3500 dans le forum Composants
    Réponses: 7
    Dernier message: 17/03/2005, 11h01
  4. [JTable] Rafraichir une JTable
    Par Invité dans le forum Composants
    Réponses: 4
    Dernier message: 08/12/2004, 14h40
  5. [Swing][TableColumnModel] model colonnes de JTable
    Par imothep dans le forum Composants
    Réponses: 2
    Dernier message: 18/06/2004, 18h32

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