Affichage table dans un jtable

Résolu/Fermé
laurent2403 Messages postés 79 Date d'inscription jeudi 11 novembre 2010 Statut Membre Dernière intervention 23 février 2020 - 27 avril 2013 à 13:52
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 28 avril 2013 à 12:05
Bonjour,



j'ai un gros pb depuis 2 jours , pas moyen d'afficher le premier champs de ma table , chaque fois que j'execute ma fenetre , j'ai 2 fois la 2 emes lignes de ma table d'affiche dans mon jtable , pas moyen d'avoir la table correctement.

je ne sais pas trop d'ou peux venir le pb , je laisse mes 2 classes , si qqun pouvait m'aider ce serait sympa , merci






package modele;

/*
* Classe comportant le modèle de données
* de la classe client doit étendre
* la classe abstraite AbstractTableModel
*/
import entite.Client;
import java.util.ArrayList;
import java.util.Date;
import javax.swing.table.AbstractTableModel;

//import javax.swing.table.AbstractTableModel;
public class Modele_Client extends AbstractTableModel {

// Propriétés
// ----------
// pour récupérer les enreg et les mettre dans le modèle
Client instanceClient = new Client();
private ArrayList<Client> lesDonnees =
instanceClient.getLesEnreg();
// les en-têtes de colonnes
private final String[] lesTitres = {"id_client", "Nom", "Prenom","tph",
"Fidélité", "Date", "vip"};

// 3 méthodes de l'interface TableModel
// doivent être obligatoirement définies
public int getRowCount() {
return lesDonnees.size();
}

public int getColumnCount() {
return lesTitres.length;
}

// pour accèder à un objet du modèle
public Object getValueAt(int rowIndex, int columnIndex) {
switch (columnIndex) {
case 0:
return lesDonnees.get(rowIndex).getId_client();
case 1:
return lesDonnees.get(rowIndex).getNom();
case 2:
return lesDonnees.get(rowIndex).getPrenom();
case 3:
return lesDonnees.get(rowIndex).getTph();
case 4:
return lesDonnees.get(rowIndex).getFidelite();
case 5:
return lesDonnees.get(rowIndex).getDate();
case 6:
return lesDonnees.get(rowIndex).getVip();

default:
return null;
}
}

// ajout d'une autre méthode de l'interface TableModel
public String getColumnName(int columnIndex) {
return lesTitres[columnIndex];
}

public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) {
case 3:
return Boolean.class;
case 4:
return Date.class;
default:
return Object.class;
}
}
"nom du 1er clients : " + test.getValueAt(1, 1));
}
}




package entite;

// pour la connexion à la BD
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;

import javax.swing.JOptionPane;

import controle.Connection_1;


public class Client {
// PROPRIETES
// ==========
// Propriété de base de la classe
// ------------------------------
private static String id_client;
private static String nom;
private static String prenom;
private static int tph;
public static int fidelite;
private static Date date;
private static boolean vip;
// Propriété pour établir la connexion avec laBD
// ---------------------------------------------
private static Connection laConnexion =
Connection_1.getLaConnectionStatique();
// Propriété de type ArrayList qui contiendra les
// enregistrements de la BD
private final static ArrayList<Client> lesEnreg = new ArrayList<Client>();



public int isCarte_Fidele() {
return fidelite;
}

public Date getDate_creation() {
return date;
}
// Getter pour transmetre l'ArrayList
// ----------------------------------

public ArrayList<Client> getLesEnreg() {
return lesEnreg;
}


public void setCarte_fidele(int carte_fidele) {
Client.fidelite = carte_fidele;
}

public void setDate_creation(Date date_creation) {
Client.date = date_creation;
}



@SuppressWarnings("static-access")
public Client(String vid_client, String vnom, String vprenom, int vtph,
int vfidelite, Date vdate, boolean vvip) {
super();
this.id_client = vid_client;
this.nom = vnom;
this.prenom = vprenom;
this.tph = vtph;
this.fidelite = vfidelite;
this.date = vdate;
this.vip = vvip;
}




// 2eme Constructeur
public Client() {
// à activer dés création de la méthode
lireRecupCRUD();

}


public static void lireRecupCRUD() {
try {Statement state = laConnexion.createStatement();
ResultSet rs = state.executeQuery("SELECT * "
+ "FROM client");

while (rs.next()) {
String codeJ = rs.getString("id_client");
String nomJ = rs.getString("nom");
String prenomJ = rs.getString("prenom");
int tphJ = rs.getInt("tph");
int carte_fideleJ =
rs.getInt("fidelite");
Date dateJ = rs.getDate("date");
boolean vipJ = rs.getBoolean("vip");
Client c = new Client(codeJ, nomJ,
prenomJ, tphJ, carte_fideleJ,dateJ,vipJ);
lesEnreg.add(c);
//System.out.println(c.getId_client());


}
} catch (SQLException e) {
JOptionPane.showMessageDialog(null,
"Problème rencontré : " + e.getMessage(),
"Résultat", JOptionPane.ERROR_MESSAGE);
}
}

public static String getNom() {
return nom;
}

public void setNom(String nom) {
this.nom = nom;
}

public static String getPrenom() {
return prenom;
}

public void setPrenom(String prenom) {
this.prenom = prenom;
}

public static int getFidelite() {
return fidelite;
}

public void setFidelite(int fidelite) {
this.fidelite = fidelite;
}

public static Date getDate() {
return date;
}

public void setDate(Date date) {
this.date = date;
}

public static Connection getLaConnexion() {
return laConnexion;
}

public static void setLaConnexion(Connection laConnexion) {
Client.laConnexion = laConnexion;
}



public static int getTph() {
return tph;
}

public void setTph(int tph) {
this.tph = tph;
}


public boolean getVip() {
return vip;
}

public static ArrayList<Client> getLesenreg() {
return lesEnreg;
}

public void setVip(boolean vip) {
this.vip = vip;
}

public static String getId_client() {
return id_client;
}

public void setId_client(String id_client) {
this.id_client = id_client;
}
}
A voir également:

1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
27 avril 2013 à 14:46
Tu as beau nous donner 2 classes complètes, ça reste qu'un code partiel, donc impossible à tester pour voir ton problème...

Quand on regarde juste le code donc il y a plusieurs problèmes :

Dans Modele_Client tu as ce code qui est en erreur (à la fin)

default: 
return Object.class;
} // fin du switch
} // fin de la méthode
"nom du 1er clients : " + test.getValueAt(1, 1)); // code en trop
} // fin de la classe
} // accolade en trop

Ensuite, tu n'as pas de constructeur pour ModeleClient, tu as réussi à faire sans mais ce que tu as fait n'est pas logique. Tu devrais changer le code "1" par le code "2" :

// 1
Client instanceClient = new Client(); 
private ArrayList<Client> lesDonnees = 
instanceClient.getLesEnreg(); 

// 2
private final ArrayList<Client> lesDonnees;

public Modele_Client(Client instanceClient)
{
    lesDonnees = instanceClient.getLesEnreg();
}

Ensuite, et je pense que c'est ton plus gros problème : tes méthodes getId_client(), getNom(), etc. sont static dans la classe Client, il est donc impossible que tes getters fonctionnent correctement, par exemple lesDonnees.get(rowIndex).getNom() renverra toujours la valeur de l'attribut static "nom", quelle que soit la valeur de la ligne get(rowIndex), c'est donc comme si tu n'avais toujours qu'une seule ligne constituée des valeurs static Client.id_Client, Client.nom, etc.

Il faut que tu utilises le mot clé static à bon escient, parce que là ton programme ne peux pas fonctionner correctement à cause de ça.
0
laurent2403 Messages postés 79 Date d'inscription jeudi 11 novembre 2010 Statut Membre Dernière intervention 23 février 2020 2
28 avril 2013 à 07:50
merci kx en fait j'ai resolue le pb j'ai tout refais , le model et la classe client , c'etait trop le boxon , j'avais un souci avec mon constructeur , voila merci de ton aide , par hasard saurais tu , comment je peux parser un jtexte.getTxt() en date pour aller dans une de mes tables , merci beaucoup
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
28 avril 2013 à 12:05
Tu peux utiliser la classe SimpleDateFormat, la méthode parse te renverra un objet Date.
0