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 :

[JTable] Probleme de rafraichissement


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut [JTable] Probleme de rafraichissement
    Bonjour,

    mon but est d'afficher les données se trouvant dans une base de données dans une JTable.
    J'ai donc creer un modele pour 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
     
    public class TableModele extends AbstractTableModel {
     
     
    	private static final long serialVersionUID = 1L;
     
    	private String[][] data;
     
    	private String[] columnNames;
     
    	public TableModele(LinkedList<LinkedList<String>> result , String[] columnNames) {
     
    		this.data = new String[result.size()-1][columnNames.length];
    		for (int i = 1; i < result.size(); i++) {
    			for (int j = 1; j < result.get(i).size(); j++) {
    				this.data[i-1][j-1]=result.get(i).get(j);
    			}
    		}
    		this.columnNames = columnNames;
     
     
    	}
     
    	public int getColumnCount() {
     
    		return data[0].length;
     
    	}
     
    	public Object getValueAt(int parm1, int parm2) {
     
    		return data[parm1][parm2];
     
    	}
     
    	public int getRowCount() {
     
    		return data.length;
     
    	}
     
    	public String getColumnName(int col) {
     
    		return this.columnNames[col];
     
    	}
     
    	public String[] getColumnNames() {
    		return columnNames;
    	}
     
    	public void setColumnNames(String[] columnNames) {
    		this.columnNames = columnNames;
    	}
     
    	public String[][] getData() {
    		return data;
    	}
    }
    Ensuite, je creer ma table, en l'inserant dans un JScrollPane, qui est lui meme dans un Panelfournisseur herite de JPanel, qui est lui meme dans un JTabbedPane qui se trouve dans la JFrame.

    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 PanelFournisseur extends JPanel {
     
    	private static final long serialVersionUID = 1L;
    	private JTable table;
    	private Controleur controleur;
     
    	public PanelFournisseur(Controleur controleur) throws SQLException {
    		super(new BorderLayout());
    		this.controleur = controleur;
    		this.table = new JTable();
    		this.updateTableFournisseur();
    		this.table.setEnabled(false);
    		this.table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
    		JScrollPane scrollPane = new JScrollPane(this.table);
    		this.add(scrollPane);
     
    	}
     
    	public void updateTableFournisseur() throws SQLException {
    		LinkedList<LinkedList<String>> result = this.controleur.getGestionStockManager().getConn().executeQuery("select * from fournisseurs");
    		String[] columnNames = {"Nom", "Adresse","CP","Ville","Pays","Téléphone","Fax","Contact","E-Mail"};
    		TableModele modeleTableFournisseur = new TableModele(result,columnNames);
    		this.setTable(new JTable(modeleTableFournisseur));
    	}
    }
    Maintenant, j'ai un bouton qui me permet de rajouter un fournisseur, et j'aimerais que la table se mettre a jour, et s'affiche avec les nouvelles informations. La fonction updatetableFournisseur me permet de mettre a jour cette table, mais elle ne se met pas jour dans la vue.

    J'ai essaye repaint(), validate(), fireTableDataChanged(), etc, mais je dois pas les utiliser correctement car ca ne fonctionne pas.

    Merci de votre aide.

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

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    Salut le fireTableDataChanged() doit être appelé après l'ajout.

    Soit tu redéfinis la méthode setValueAt de ton TableModel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @Override
    public void setValueAt(Object value, int rowIndex, int columnIndex) {
    	this.data[rowIndex][columnIndex]= value;
            this.fireTableDataChanged();
    }
    Soit tu ajoutes une méthode addFournisseur(String[] fournisseur) dans ton tableModel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void addFournisseur(String[] fournisseur){
            //TODO : Ajout dans ton tableau de données
            //Ensuite notification des modifications
           this.fireTableDataChanged();
    }
    Par contre je te conseille d'utiliser une ArrayList<String[]> pour ton data qui te permettra d'ajouter un fournisseur sans recréer ton data en entier, car dans ton exemple c'est le cas car ton data a une taille fixe.

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut
    Merci, en rajoutant la methode addFournisseurs ca marche nickel. Mon problème venait en fait du fait que mon TableModele etait une variable qui ne servait que a la creation de la table, elle n'etait stockée nulle part.

    Merci

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/05/2010, 10h17
  2. Réponses: 4
    Dernier message: 24/08/2007, 16h44
  3. [jTable] probleme de rafraichissement (conception?)
    Par lkryss dans le forum Composants
    Réponses: 27
    Dernier message: 10/07/2006, 11h59
  4. [JTable] probleme de rafraichissement
    Par biozaxx dans le forum Composants
    Réponses: 6
    Dernier message: 13/02/2006, 14h14
  5. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07

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