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 :

Actualisation JTable Java


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 70
    Par défaut Actualisation JTable Java
    Bonjour,

    Après plusieurs recherches et tests perso, je n'ai pas réussis à trouver la solution, malgré le nombre important de sujets correspondant à mon problème.

    Ma situation:
    Je charge depuis une BD des "Opérations", que je met ensuite dans une collection d'Opération.
    Ensuite, je crée le modèle d'un JTable à l'aide de ma collection, de cette façon:
    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
    public DefaultTableModel modele(ArrayList<Operation> listeOperations){
     
    		String[] colonnes = {"Numero", "type", "Libell\u00E9", "Montant", "Date", "Categorie", "V\u00E9rifi\u00E9","Numero Chèque"}; //Les colonnes de la jTable
    	    Object[][] donnees=new Object [listeOperations.size()][colonnes.length]; //Les données de la jTable
     
    	    for(int i=0;i<listeOperations.size();i++){
    	    	for(int j=0;j<=colonnes.length-1;j++){
    	    		switch (j) 
    	    		{ 
    	    		// recup de toutes les données de listeOperations dans le jtable
    	    		}
     
    	    	}
    	    }
     
     
     
     
    		DefaultTableModel m1=new DefaultTableModel(donnees,colonnes) 
    		{
    				@SuppressWarnings("rawtypes")
    				Class[] columnTypes = new Class[] {
    					Integer.class, String.class, String.class, Double.class, Object.class, String.class, Boolean.class, Integer.class
    				};
    				@SuppressWarnings({ "unchecked", "rawtypes" })
    				public Class getColumnClass(int columnIndex) {
    					return columnTypes[columnIndex];
    				}
    				boolean[] columnEditables = new boolean[] {
    						false, false, true, true, true, false, true, false
    					};
    					public boolean isCellEditable(int row, int column) {
    						return columnEditables[column];
    				}
    		};		
     
    		return m1;
    	}
    Cela fonctionne, lors de mon premier appel, j'ai bien l'affichage de toutes les données voulues.

    Ensuite, je désire, en fonction du clic de deux boutons, afficher uniquement les Opérations de type "CB" (carte bancaire) ou de type "CH".

    Ainsi, le clic sur le bouton Carte Bancaire entraîne l'action suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    JButton btnCarte = new JButton("Carte");
    		btnCarte.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				String cond=" and type!='CH'";				
    				affichOperation(cond);
    			}
    		});
    et la methode affichOperation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	public void affichOperation(String cond){
    		maDao = new DaoOperationMySql();
    		ArrayList<Operation> listeOperations = maDao.getAll(cond);
    		System.out.println(listeOperations.size());
    		DefaultTableModel m1=modele(listeOperations);
    		table= new JTable(m1);		
    		table.setBounds(10, 32, 653, 350);
    		table.getColumnModel().getColumn(1).setPreferredWidth(58);
    		table.getColumnModel().getColumn(2).setPreferredWidth(147);
    		table.getColumnModel().getColumn(5).setPreferredWidth(89);
    		table.setBorder(UIManager.getBorder("FormattedTextField.border"));
    	}
    A priori, cette dernière méthode devrait changer le modèle avec les bonnes données, ce qui se passe exactement au niveau system (l'affichage de la taille avant et après le clic sur ce bouton évolue) mais aucun changement ne se fait au niveau visuel.

    J'ai testé les différents revalidate(), repain() sur le jtable, ainsi que fireTableDataChanged() sur son modèle, mais pas de changement :/


    Vous avez des idées?

    Merci.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Ceci instancie un nouveau tableau mais ne le place pas dans l'interface à la place de l'ancien. Du coup c'est toujours ton ancien tableau avec l'ancien model qui s'affiche.
    Le mieux serait de ne pas re-instancier ton tableau et d'utiliser la méthode setModel(TableModel model) de JTable.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 70
    Par défaut
    C'est génial merci

    J'ai rajouté une condition afin de permettre l'affichage du jtable pour son premier affichage, sinon cela m'affichait un java.lang.NullPointerException.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(cond.compareTo("")==0){
    	  table= new JTable(m1);
          }else{
    	  table.setModel(m1);
    }
    Au passage si quelqu'un trouve mon code trop lourd, je serais pas contre queqlues conseils. Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher la table Postresql dans JTable Java
    Par faniette dans le forum Composants
    Réponses: 6
    Dernier message: 19/04/2010, 20h27
  2. Afficher la table Postresql dans JTable Java
    Par faniette dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 06/04/2010, 18h00
  3. Réponses: 9
    Dernier message: 31/05/2009, 03h59
  4. Actualisation JTable avec BDD
    Par Mokujil dans le forum Composants
    Réponses: 1
    Dernier message: 27/05/2009, 14h24

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