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 :

Mise à jour d'une JTable (Problème d'affichage)


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Par défaut Mise à jour d'une JTable (Problème d'affichage)
    Bonjour tout le monde

    Alors voilà mon problème :

    Je possède une JTable pour afficher des données d'une base de données

    ces données depend d'une date entrée par l'utilisateur

    ça marche bien lors de la prmière utilisation ,et s'il change la date ma JTable

    n'est pas mis à jour et je sais pas comment la metrre à jour,

    j'ai utilisé repaint et revalidate ,mais ça change rien,

    sachant que si j'ai fait un getValeurAt(1,1) je trouve la valeur que je veut

    mais n'est pas affiché !!

    merci d'avance

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Un peu de code est nécessaire pour tenter de trouver le problème
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut Perso
    Dans ce genre de cas, je vire tout (mes jTables marchent avec un ArrayList) donc ArrayList.clear();
    et je rerempli tout, et ça marche bien avec un repaint

  4. #4
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Par défaut
    Bonjour

    merci pour vos réponses

    pour donnadieujulien

    moi aussi j'utilise des ArrayList() pour remplir ma JTable,et c'est logique de

    faire un clear à chaque fois , et j'ai éssayer d'afficher mes ArrayList sans faire

    clear et avec clear ,ça dans le meme résultat et repaint n'a pas résolu le

    problème.

    pour dinobogan voila mon code:


    remplissage de la table :
    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
     
    public class TableRapport {
     
    	  Connection conn;
    	  String date;
     
    	  double PJ=0,PC=0;
    	  double LJ=0,LC=0;  
     
    	  ArrayList t1=new ArrayList();
    	  ArrayList t2=new ArrayList();
    	  ArrayList t3=new ArrayList();
    	  ArrayList t4=new ArrayList();
    	  ArrayList t5=new ArrayList();
     
     
    	  DefaultTableModel model;
    	  JScrollPane scroll=new JScrollPane();
    	  table tableau =null;
     
    	  DefaultTableCellRenderer forme;
     
    	  FormeColonne produitForme,PForme,PCForme,LForme,LCForme;
     
    	public TableRapport(Connection conn,String date,String req){
     
            this.conn=conn;
    		this.date=date;   
     
    	        Requete resultat = new Requete(conn,req,1); 
     
             try {     
     
    	    	  /*  t1.clear();
    	    	    t2.clear();
    	    	    t3.clear();
    	    	    t4.clear();
    	    	    t5.clear();*/
     
    	    		System.out.println(t2);
     
    	         while(resultat.resultat.next())
     
    	         {				  	
    	        	 String RefProduit=resultat.resultat.getString(1);
    			     t1.add(RefProduit);			     
    			     ChercheTable(RefProduit);
    	             t2.add(PJ);
    	             t3.add(PC);
    	             t4.add(LJ);
    	             t5.add(LC);  
     
    	 			PJ=0;
    	 			LJ=0;  
    	     		PC=0;
    	 			LC=0;  
    	         }
     
     
    	        }catch(SQLException e) { 
    		    	  e.printStackTrace(); 
    	    	 }		                  
                    model=new DefaultTableModel(){
     
            	      public boolean isCellEditable(int row, int col){ 
            		  if (col==0) {return false;} 
            		   else {return true; }
     
            	     }
                };  
     
              System.out.println(t2);
              model.addColumn("        Réference du produit  ",t1.toArray());
              model.addColumn(" Production du jour ",t2.toArray());        
              model.addColumn(" Production Cumulée ",t3.toArray());
              model.addColumn(" Livraison du jour ",t4.toArray());
              model.addColumn(" Livraison Cumulée ",t5.toArray());                  
     
    	        tableau = new table(model);  
     
    	 	    produitForme=new FormeColonne(tableau.tablee,"        Réference du produit  ",Color.DARK_GRAY,Color.yellow,JLabel.LEFT); 
                PForme=new FormeColonne(tableau.tablee," Production du jour ",Color.white,Color.black,JLabel.CENTER); 
    	 	    PCForme=new  FormeColonne(tableau.tablee," Production Cumulée ",new Color(0,74,14),Color.white,JLabel.CENTER); 
    		    LForme=new  FormeColonne(tableau.tablee," Livraison du jour ",Color.white,Color.black,JLabel.CENTER); 
    		    LCForme=new  FormeColonne(tableau.tablee," Livraison Cumulée ",new Color(0,74,14),Color.white,JLabel.CENTER); 
     
    			scroll.setViewportView(tableau.tablee);
     
    	}
     
      public void ChercheTable(String RefProduit){	 
     
    	  String req="SELECT Production_J,PC,Livraison_J,LC FROM omag_valeur WHERE Date ='"+date+"' AND RefProduit ='"+RefProduit+"'"; 
          Requete resultat = new Requete(conn,req,1); 
     
          try{  
     
        	  while(resultat.resultat.next()){  
     
        		PJ=resultat.resultat.getDouble(1);  
        		PC=resultat.resultat.getDouble(2);  
        		LJ=resultat.resultat.getDouble(3);  
        		LC=resultat.resultat.getDouble(4);    		   
        	  }   	  
          }catch(SQLException e){
           	 e.printStackTrace();
        	 }
     
       }
     
    }
    propriétes de la table :


    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
    public class table{
     
     
    	JTable tablee=new JTable();
     
     
      public table(DefaultTableModel model) {
     
     
    	        tablee.setModel(model); 
    	        tablee.setCellSelectionEnabled(true);
    	        tablee.setAutoCreateRowSorter(true);
    	        tablee.setAutoResizeMode(0);
    	        tablee.setColumnSelectionInterval(1, 1);
    	        tablee.setRowSelectionInterval(0, 0);
     
    	        tablee.setRowHeight(20);
     
    	        // definir un curseur sur la table
     
    	        Image img=Toolkit.getDefaultToolkit().getImage("images\\curseurs\\plus.gif");
    	        Point p=new Point(15,15);
    	        Cursor curs=Toolkit.getDefaultToolkit().createCustomCursor(img,p, "x");
    	        tablee.setCursor(curs);
     
         }		
     }
    appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            TableRapport Trapport;	  
            JPanel rapport=new JPanel();
             rapport.setLayout(null); 	  
            Trapport = new TableRapport(conn,d.datereponse,ReqJournalier);
            // avec conn=connection et d.datereponse=la date entrée et ReqJournalier=requete
    	    Trapport.scroll.setBounds(20,10,790,350);
            rapport.add(Trapport.scroll);
            Trapport.tableau.tablee.revalidate();
    merci pour votre aide.

  5. #5
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Salut,

    Il suffit de créer un model, puis de l'attribuer à la JTable. Voici un exemple, ou à chaque clic sur le bouton la JTable est remise à jour :

    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
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
     
    public class Test {
     
    	private boolean toggle = true;
     
    	private Object[][] donnees = {  
    		      {"Swing", "Astral", "standard", Color.red, Boolean.TRUE}, 
    		      {"Swing", "Mistral", "standard", Color.yellow, Boolean.FALSE}, 
    		      {"Gin", "Oasis", "standard", Color.blue, Boolean.FALSE},
    		      {"Gin", "boomerang", "compétition", Color.green, Boolean.TRUE},
    		      {"Advance", "Omega", "performance", Color.cyan, Boolean.TRUE}, 
    		} ;
    	private Object[][] donnees2 = {  
    		      {"1", "2", "3", Color.CYAN, Boolean.FALSE}, 
    		      {"4", "5", "6", Color.ORANGE, Boolean.TRUE}, 
    		      {"7", "8", "9", Color.MAGENTA, Boolean.FALSE} 
    		} ;
    	private String[] titreColonnes = { "marque","modèle", "homologation",
    		                           "couleur", "vérifiée ?"};
     
    	private JTable table;
    	private DefaultTableModel model;
     
    	public static void main(String[] args) {
    		new Test();
    	}
     
    	public Test() {
    		JFrame f = new JFrame();
    		model = new DefaultTableModel(donnees, titreColonnes);
    		table = new JTable(model);
    		JButton action = new JButton("toggle");
    		action.addActionListener(new ActionListener() {
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				if (toggle) {
    					model = new DefaultTableModel(donnees2, titreColonnes);
    				}
    				else {
    					model = new DefaultTableModel(donnees, titreColonnes);
    				}
    				toggle = !toggle;
    				table.setModel(model);				
    			}
    		});
    		f.add(action, BorderLayout.NORTH);
    		f.add(new JScrollPane(table), BorderLayout.CENTER);
    		f.pack();
    		f.setVisible(true);
    	}
    }

  6. #6
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Par défaut
    salut

    merci beaucoup visiwi pour cette réponse

    j'ai testé ce code et ça marche pour cet exemple ,mais j'ai pas arrivé à

    l'adapté avec mon problème car l'utilisateur peut entrez une infinité des dates

    donc je peux pas créer pour chaque date son modele ,

    merci encore.

  7. #7
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Mais comment sont créé les données de ta JTable. Post ton code (simplifié et fonctionnel si possible).

  8. #8
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Désolé, je fait plusieurs choses en même temps et j'avais oublié que tu avait déjà poster un peu de code

    Je ne vois vraiment pas ton problème car tu utilise le constructeur TableRapport(Connection conn,String date,String req) de ton objet TableRapport qui te permet "d'alimenter" ton model ! Cette date dont tu parle influence ta requête SQL, non ?
    Alors pourquoi dit-tu :
    mais j'ai pas arrivé à l'adapté avec mon problème car l'utilisateur peut entrez une infinité des dates donc je peux pas créer pour chaque date son modele

  9. #9
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Par défaut
    merci visiwi de cette suivi

    en faite la table est remplis par les ArrayList t1,t2,t3,t4,t5

    ces derniers sont remplis par PJ,LJ,PC,LC trouvées par ChercheTable(String

    RefProduit)

    PJ,LJ,PC,LC sont seulement la dernière ligne de ResultSet car j'ai un problème aussi de recuperer directement la dernière ligne c'est pour cela j'ai utilisé la boucle while.

    et tous ça depend de la date entrée par l'utilisateur

  10. #10
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut Euh...
    Peut être une question conne mais pourquoi tu ecris tout le temps resultat.resulat. ??? Jamais vu ça

    Pour aller chercher le dernier élément, tu peu utiliser la cond resultat.isLast()

  11. #11
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Oui, mais tu construit ton modèle justement grace a cette requete SQL en fonction de la date.

    Selon moi, tu devrait avoir :
    • une méthode : qui renvoi un model en fonction de ta requête SQL

    • une méthode : qui permet d'associer un model a ta JTable


    Ce qui donnerait ensuite un code comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ?.associeModelToJTable(?.getModelFor(String requeteSQL));

  12. #12
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Par défaut
    le ReseltSet ne me pose pas de problème maintenant car ça fonctionne

    mais c'est une perte de temps et voilà la discussion sur ceci est ouverte sur le lien suivant

    http://www.developpez.net/forums/d59...rnier-element/


    pour les ArrayList t1,t2...sont toujours bien remplis a chaque changement de la date

    car si je fait un println de t1,t2.. ou je fait un getValueAt(1,1) il m'affiche la valeur voulu

  13. #13
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Par défaut
    Citation Envoyé par donnadieujulien Voir le message
    Peut être une question conne mais pourquoi tu ecris tout le temps resultat.resulat. ??? Jamais vu ça

    Pour aller chercher le dernier élément, tu peu utiliser la cond resultat.isLast()
    SALUT

    dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Requete resultat = new Requete(conn,req,1);
    while(resultat.resultat.next())

    les deux resultats sont differents

    le deuxieme resultat c'est celui de la Requete defini par :

    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
    public class Requete {
    	
    	ResultSet resultat=null; 
    	Statement statement;
    	
    	 public  Requete(Connection conn,String req,int a){
    
    		try {
    			
    	//	      statement= conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
    		   
    		      
    		      
    			  statement= conn.createStatement();
    			  if(a==1) 
    			  resultat=statement.executeQuery(req);
    			  else if(a==2)
    			  statement.executeUpdate(req);
    			  
    		    } catch(SQLException e) { 
    		    	  e.printStackTrace(); 
    	    	 } 	
    		
    		}
    }

  14. #14
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Par défaut
    une idée SVP

  15. #15
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    J'ai du mal à comprendre où se situe maintenant le problème, as-tu testé les solutions que l'on t'a donné?

  16. #16
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Par défaut
    merci CheryBen pour ta réponse


    je reéxplique le problème:

    bon j'ai une JTable que je dois remplir à partir d'une base de données ,

    cette base contient une table composé de plusieurs enregistrement et 6

    colonnes, parmi ces colonnes il ya une colonne Date qui signifie la date

    d'entrée de cet enregistrement.

    donc l'utilisateur veut consulter les enregistrement entrés pour une date

    donnée , pour la première utilisation les données récuperées sont bien

    affichées dans la table , mais lorsqu'il change la date, les données de la

    premiére utilisation qui sont affichées, c-a-d il faut faire une mise à jour de la

    table , et si je fait par exemple getValueAt(0,1) me donne 50(la valeur de

    voulue de la deuxième date entrée) alors que 10

    de la première utilisation qu'est affiché dans la table.


    la solution proposé utilise un model different de clui que j'utilise ,

    j'ai creé une classe qui renvoi un model comme il a dit visiwi mais ça marche

    pas pour mon problème.

    j'essaye maintenant de changer tout le model et d'appliquer

    fireTableCellUpdated ou fireTableCellChange .

  17. #17
    Membre éclairé Avatar de DjGonk
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    Bonjour,

    Il est quand même plus simple de faire un AbstractTableModel avec des ArrayList<E> où E représente ton tuple (si j'ai bien compris un objet avec 6 variables).

    Pour afficher cette ArrayList<E> de ton AbstractTableModel tu dois créer un TableCellRenderer sur ta table pour avoir le format voulu et surtout pour dire que la variable1 va dans la colonne 0, etc...

    Pour la mise à jour soit tu refais ta requete et tu écrases l'arraylist, soit tu modifies l'objet E correspondant au tuple qui à été modifié. Surtout ne pas oublier de faire un fireTableDataChanged() !

  18. #18
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Par défaut
    merci DjGonk pour ta réponse je vais essayer votre proposition

    maintenant j'essaye avec ce 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
      public  class MyTableModel extends AbstractTableModel {
     
     
    	    private String[] columnNames={"        Réference du produit  "," Production du jour "," Production Cumulée "," Livraison du jour "," Livraison Cumulée "};  
     
     
    	    public int getColumnCount() {
    	        return columnNames.length;
    	    }
     
    	    public int getRowCount() {
    	        return data.length;
    	    }
     
    	    public String getColumnName(int col) {
    	        return columnNames[col];
    	    }
     
    	    public Object getValueAt(int row, int col) {
    	        return data[row];
    	    }
     
    	    public Class getColumnClass(int c) {
    	        return getValueAt(0, c).getClass();
    	    }           
     
    	    public void setValueAt(Object value, int row, int col) {
    	        data[row] = t1.toArray();   
    	        fireTableCellUpdated(row, col);
    	    }
     
     
     
     
      }

  19. #19
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Par défaut
    salut

    j'ai changé le model mais il ya un problème dans la boucle for :


    meme si j'utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
               JTable table=new JTable(dataTout,columnNames);
               scroll.setViewportView(table);

    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
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    public class TableRapport {
     
    	  Connection conn;
    	  String date;
     
    	  double PJ=0,PC=0;
    	  double LJ=0,LC=0;  
     
    	  ArrayList t1=new ArrayList();
    	  ArrayList t2=new ArrayList();
    	  ArrayList t3=new ArrayList();
    	  ArrayList t4=new ArrayList();
    	  ArrayList t5=new ArrayList();
     
     
    	  DefaultTableModel model; 
    	  JScrollPane scroll=new JScrollPane();
    	  table tableau =null;
     
    	  DefaultTableCellRenderer forme;
     
    	  FormeColonne produitForme,PForme,PCForme,LForme,LCForme;
          private Object[] dataRefProduit;
          private Object[] dataPJ;
          private Object[] dataPC;
          private Object[] dataLJ;
          private Object[] dataLC;
          private String[] columnNames={"        Réference du produit  "," Production du jour "," Production Cumulée "," Livraison du jour "," Livraison Cumulée "};  
     	  Object[][] dataTout;
     
    	public TableRapport(Connection conn,String date,String req){
     
            this.conn=conn;
    		this.date=date;   
    		int i=1;
    	        Requete resultat = new Requete(conn,req,1); 
     
             try {     
     
    	    		System.out.println(t2);
     
    	         while(resultat.resultat.next())
     
    	         {				  	
    	        	 String RefProduit=resultat.resultat.getString(1);
     
    	        	 t1.add(RefProduit);			     
    			     ChercheTable(RefProduit);
    	             t2.add(PJ);
    	             t3.add(PC);
    	             t4.add(LJ);
    	             t5.add(LC); 	 
     
    	 			PJ=0;
    	 			LJ=0;  
    	     		PC=0;
    	 			LC=0;
    	 			i++;
    	         }
     
     
    	        }catch(SQLException e) { 
    		    	  e.printStackTrace(); 
    	    	 }	
     
    	        dataRefProduit=t1.toArray();
                dataPJ=t2.toArray();
                dataPC=t3.toArray();
                dataLJ=t4.toArray();
                dataLC=t5.toArray();
     
                // le problème est ici dans , cette méchante boucle 
     
               for(int j=0;j<t1.size();j++)       
                {
     
            	   dataTout[j][0]=dataRefProduit[j];
            	   dataTout[j][1]=dataPJ[j];
            	   dataTout[j][2]=dataPC[j];
            	   dataTout[j][3]=dataLJ[j];
            	   dataTout[j][4]=dataLC[j];   
     
                }
     
     
               tableau = new table(new MaTableModel());           
    			scroll.setViewportView(tableau.tablee);
     
    			// meme si j'utilise la methode standard ça marche pas 
     
            //   JTable table=new JTable(dataTout,columnNames);
           //    scroll.setViewportView(table);       
         	}  
     
      public void ChercheTable(String RefProduit){	 
     
    	  String req="SELECT Production_J,PC,Livraison_J,LC FROM omag_valeur WHERE Date ='"+date+"' AND RefProduit ='"+RefProduit+"'"; 
          Requete resultat = new Requete(conn,req,1); 
     
          try{  
     
        	  while(resultat.resultat.next()){  
     
        		PJ=resultat.resultat.getDouble(1);  
        		PC=resultat.resultat.getDouble(2);  
        		LJ=resultat.resultat.getDouble(3);  
        		LC=resultat.resultat.getDouble(4);    		   
        	  } 
     
          }catch(SQLException e){
           	 e.printStackTrace();
        	 }
     
       }
     
     
      public  class MaTableModel extends AbstractTableModel {	 
     
    	    public int getColumnCount() {
    	        return columnNames.length;
    	    }
     
    	    public int getRowCount() {
    	        return dataTout.length;
    	    }
     
    	    public String getColumnName(int col) {
    	        return columnNames[col];
    	    }
     
    	    public Object getValueAt(int row, int col) {
    	        return dataTout[row][col];
    	    }
     
    	    public Class getColumnClass(int c) {
    	        return getValueAt(0, c).getClass();
    	    }           
     
    	    public void setValueAt(Object value, int row, int col) {
    	    	dataTout[row][col] = value;
    	        fireTableCellUpdated(row, col);
    	    }	    	
      } 
     
    }

  20. #20
    Membre éclairé Avatar de DjGonk
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    D'après ce que je vois il serait quand même plus judicieux d'utiliser un objet pour chaque enregistrement de la table ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class OmagValeur {
     
        Object refProd;
        Object PC;
        ....
        Object LivraisonJ
        Object LC;
     
        //Mettre les getters et setters qui faut
     
    }
    et ensuite dans le AbstractTableModel utiliser une ArrayList<OmagValeur>.

    Pour ma part j'utiliserais hibernate pour ce genre de chose puisqu'il permet de mapper sans soucis tes tables en Pojo et de gerer tes données de Bd très simplement.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Mise à jour d'un Jtable (problème complexe)
    Par Micke7 dans le forum Composants
    Réponses: 9
    Dernier message: 28/09/2009, 15h33
  2. Mise à jour d'une JTable
    Par kimlaw95 dans le forum Composants
    Réponses: 6
    Dernier message: 03/04/2009, 15h25
  3. mise à jour d'une JTable => erreur aléatoire
    Par AliLoU` dans le forum Composants
    Réponses: 2
    Dernier message: 30/03/2007, 15h11
  4. Mise à jour d'une JTable en fonction d'une JList
    Par xtaZy dans le forum Composants
    Réponses: 1
    Dernier message: 21/03/2007, 18h25
  5. mise à jour d'une JTable ?
    Par Sakalam dans le forum Composants
    Réponses: 11
    Dernier message: 15/09/2006, 15h06

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