Accueil > Forum > > > > Editer des données affiché sur un JTable
Editer des données affiché sur un JTable
vendredi 26 mai 2006 à 19:16:46 |
Editer des données affiché sur un JTable

alia_2006
|
Salut tous le monde, j'ai un problème avec le jTable: je veux afficher des données (de la base de données) sous forme editable(pour pouvoir faire un mis à jours des données:update). les données apparaissent sans soucis mais elles ne sont pas editables. les méthodes offertes par le netbeans (setEditable(true);....) ne marchent plus et je ne sais pas pourquoi??Faut il ajouter un code spéciale dans le modèle pour pouvoir editer les données affichées sur le jTable???? Merci d'avance.
|
|
vendredi 26 mai 2006 à 19:33:46 |
Re : Editer des données affiché sur un JTable

scaryman
|
Salut C'est bizarre en effet mais il y a justement un exemple de JTable dont les données proviennet d'un DB dans le jdk : jdk/demo/jfc/TableExample/src/TableExample.java Si tu ne t'en sors toujours pas, donne-nous un bout de code pour voir ce qui ne va pas.
A++
|
|
samedi 27 mai 2006 à 06:30:23 |
Re : Editer des données affiché sur un JTable

RedDog
|
Salut, Tu peux configurer ça par le model:
DefaultTableModel dtm = newDefaultTableModel(data[][],header[]){ Class[] types = new Class[]{ java.lang.String.class, java.awt.Color.class, java.lang.Boolean.class}; boolean[] canEdit = newboolean[]{ false, true, true}; public Class getColumnClass(int columnIndex){ return types[columnIndex];} publicbooleanisCellEditable(int rowIndex, int columnIndex){ return canEdit[columnIndex];} };
table.setModel(dtm);
Voir la doc et le Java Tutorial aussi! Voilà!
|
|
jeudi 1 juin 2006 à 19:54:40 |
Re : Editer des données affiché sur un JTable

alia_2006
|
Salut! j'ai essayé les solutions proposé mais rien ne change. je met à votre dispostion un bout de code. Mon Modèle est appelé Table: <code> import java.util.Vector; import javax.swing.table.AbstractTableModel; public class Table extends AbstractTableModel{ Object donnees[][]; String titres[]; protected Vector v; /** Creates a new instance of Table */ public Table(Object donnees[][], String titres[]) { this.donnees = donnees; this.titres = titres; } public int getRowCount() { try{ return donnees.length; }catch(Exception e){ return 0; } } public int getColumnCount() { try{ return donnees[0].length; } catch (Exception e){ return 7; } } public Object getValueAt(int param1, int param2) { return donnees[param1][param2]; } public String getColumnName(int col){ try{ return titres[col]; }catch(Exception e){ return "Erreur"; } } } <code\> A partir de la classe BE, je tire les information que je veux mettre dans le jTable de la classe FI voici le code de la classe BE que j'ai utilisé pour récupérer les données <code> public void recuperDonneeBE(){ nomtest=this.jTextField6.getText();//nom technicien String argadress=this.jTextField11.getText();///adresse String argnomper=this.jTextField12.getText();//nom de personne à contacter String argTel=this.jTextField13.getText();//num de tel int tell=Integer.parseInt(argTel); String argObs= this.jTextArea1.getText();//l'observation int argnumB= val;//numBE //--------->creation d'un bon entree befi= new BonEntree(argnumB,identTechnicien,dateaffiche,argObs,argnomper,tell); vectBE.addElement(befi);} public void recuperDonneeMat(){ rowSelected = jTable1.getSelectedRow(); Object objNom = jTable1.getValueAt(rowSelected,0);//nomMateriel Object objNum = jTable1.getValueAt(rowSelected,1); //numSerie Object objStat = jTable1.getValueAt(rowSelected,2);//nomStatut Object objTypPan = jTable1.getValueAt(rowSelected,3);//Type de panne Object objObser = jTable1.getValueAt(rowSelected,4);//Observation sur le matériel int argnumM=numMat;//numMat String nomM = String.valueOf(objNom); String numM = String.valueOf(objNum); String statM = String.valueOf(objStat); String typeM = String.valueOf(objTypPan); String observerM = String.valueOf(objObser); Object objj=jComboBox1.getSelectedItem(); codClient=(String)jComboBox2.getSelectedItem();//le code du client mfi=new Materiel(argnumM,codT,statM,numM,nomM,typeM,observerM); vectMat.addElement(mfi); }
<code\> c'est le constructeur de la classe FI. <code> public FI(BE be) { constructor=1; this.be=be; mat=new Materiel(); bet=new BonEntree(); tek=new Technicien(); tek1=new Technicien(); cl= new Client(); cl1= new Client(); nbMat=0; String s=null; c=new ConnectionBD(); initComponents(); this.jButton1.setEnabled(false) ; this.setBounds(50,50,700,550); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); afficheDate(); affichenum(); affichDonneeFromBE(); affTabCombo(); jTable1.setEditingRow(0); jTable1.setSurrendersFocusOnKeystroke(true); setVisible(true); } // c'est la méthode qui récupère les données et les met dans le jTable affiché public void affichDonneeFromBE(){ for(int i=0;i<be.vectMat.size();i++){ /****/mat=(Materiel)be.vectMat.elementAt(0); n=mat.getNumMat(); nom=mat.getNomMat(); co=mat.getIdentifiantC(); try { cl=cl1.consulterClient(co) ; } catch (SQLException ex) { ex.printStackTrace(); } nomCompletCl=cl.getNom()+" "+cl.getPrenom(); statt=mat.getNomStatut(); numSeri=mat.getNumSerie(); typP=mat.getPanneCl(); ob=mat.getObservation();} for(int i=0;i<be.vectBE.size();i++){ /****/bet=(BonEntree)be.vectBE.elementAt(0); num=bet.getNumBE(); coTech=bet.getIdentifiant(); try { tek=tek1.rechercherSuivCode(coTech); } catch (SQLException ex) { ex.printStackTrace(); } dat=bet.getDateCreationBE(); obb=bet.getObservation(); per=bet.getPerContacte(); tell=bet.getTelPerContacte();} ////***************Affiche des données dans l'interface FI ********///////// this.jTextField10.setText(""+num); this.jTextField11.setText(dat); // this.jTextField9.setText(tek.getNom()); this.jTextField4.setText(per); this.jTextField6.setText(" "+tell); this.jTextField3.setText(nomCompletCl); this.jTextField5.setText(cl.getAdresse()); /////***************Affiche donnees dans jTable*********////////////// jTable1.setModel(remplirTableFromBE()); ///////////////////////***********************************////////////// }
public Table remplirTableFromBE(){ int j=0; mat2=new Materiel(); Object[][] enregistrement=null; int taille =be.indicSelectedRows.length; enregistrement = new Object[taille][6]; for (int i=0;i<be.indicSelectedRows.length;i++) { mat2=(Materiel)be.vectMat.elementAt(be.indicSelectedRows[i]); enregistrement[j][0] = mat2.getNomMat(); enregistrement[j][1] = mat2.getNumSerie(); enregistrement[j][2] = mat2.getNomStatut(); j++; } String titreColonnes[]={"Materiel","Numero Serie","Statut","Type de Panne","Temps de réparation","Description","prix"}; Table tab = new Table(enregistrement,titreColonnes); return tab; } <code\> voila c'est un bout de code que je fais(j'espère qu'il sera suffisant pour expliquer où est le problème.), je crois que le problème c'est que je ne sais pas vraiment comment exploiter mon modèle nommé Table. j'ai besoin d'aide. je me pose toujours la question :est ce que l'utilisation du jTable est difficile comme elle me parait?????????? Remarque: le code de la classe Table est tiré de l'Internet
|
|
vendredi 2 juin 2006 à 06:41:57 |
Re : Editer des données affiché sur un JTable

RedDog
|
Réponse acceptée !
Bonjour,
En effet, je pense aussi que le problème c'est le model.
JTable est assez simple mais il y a des choses qu'on peut faire que par JTable
ou que par le TableModel. insertRow ou addRow par exemple ne sont disponibles
que dans un DefaultTableModel.
Là tu as choisi un AbstractTableModel, donc de faire les méthodes de gestion de
la table par le modèle, par toi-même. Et donc d'avoir un modèle personnalisé à
souhait!
Ce Table marche (j'ai viré les import et le vecteur, ça servait à rien):
public class Table extends javax.swing.table.AbstractTableModel{
/* Variables */
// La variable données doit être remplit en externe.
// La méthode getValueAt renseignera le TableModel.
Object donnees[][];
// Contient les en-têtes de colonne
par défaut.
// La méthode getColumnName renseignera le TableModel.
String titres[] = {
"Materiel",
"Numero
Serie",
"Statut",
"Type
de Panne",
"Temps
de réparation",
"Description",
"Prix" };
// Contient les classes des
colonnes par défaut.
// La méthode getColumnClass renseignera le TableModel.
Class[] types = new
Class[]{
java.lang.String.class,//Materiel
java.lang.String.class,//Numero Serie
java.lang.String.class,//Statut
java.lang.String.class,//Type de Panne
java.lang.String.class,//Temps de
réparation
java.lang.String.class,//Description
java.lang.String.class//Prix
};
// Défini si une colonne est
éditable (true) / pas éditable (false)
// par défaut. La méthode isCellEditable renseignera le
TableModel.
// Double-cliquer sur la cellule éditable pour modifier une
valeur
// si sa Class est String par exemple.
boolean[] canEdit = new boolean[]{
true,//Materiel
true,//Numero Serie
true,//Statut
true,//Type de Panne
true,//Temps de réparation
true,//Description
true//Prix
};
/* Constructeurs */
/** Crée une <b>Table</b> avec paramètres par
défaut. */
publicTable()
{
}
/** <p>Crée une
<b>Table</b> avec données et paramètres par défaut.</p> */
publicTable(Object[][]
donnees) {
this.donnees
= donnees;
}
/** <p>Crée une
<b>Table</b> avec données, en redéfinissant pour chaque
* colonne, l'en-tête, le type de
<code>Class</code> et le fait qu'elle
* soit ou non éditable.</p> */
publicTable(Object[][]
donnees, String[] titres,
Class[]
types, boolean[] canEdit) {
this.types
= types;
this.canEdit
= canEdit;
this.donnees
= donnees;
this.titres
= titres;
}
/* Méthodes */
public intgetRowCount()
{ try{
return donnees.length;
}catch(Exception
e){
return 0;
}
}
publicintgetColumnCount() {
try{
return donnees[0].length;
}catch(Exception
e){
return 7;
}
}
public Object getValueAt(int param1, int
param2) {
return
donnees[param1][param2];
}
public String getColumnName(int col){
try{
return titres[col];
}catch(Exception
e){
return "Erreur";
}
}
public Class getColumnClass(int columnIndex){
try{
return types[columnIndex];
}catch(Exception
e){
return Object.class;
}
}
publicbooleanisCellEditable(int rowIndex, int
columnIndex){
try{
return canEdit[columnIndex];
}catch(Exception
e){
return false;
}
}
/** Ajoute une ligne dans la
<b>Table</b> */ publicvoidaddRow(Object[] object){
Object rows[][] = new Object[donnees.length+1][7];
for(int i=0;i<donnees.length;i++){
for(int j=0;j<7;j++){
rows[i][j] = donnees[i][j];
}
}
for(int k=0;k<7;k++){
rows[donnees.length][k] = object[k];
}
donnees = rows;
}
}
Et maintenant, si on veut faire un petit essai :
Object[][] donnees = { {"Scie","778546FP","En
stock","Electrique", "1 semaines","Scie
Black&Decker","120€"}, {"Perceuse","956214DE","En
stock","Electrique", "1
semaines","Perceuse Bosch","140€"}, {"Bois","213467TG","Epuisé","Fournisseur",
"indéfini","Chêne","à la coupe"} };
JTable nouvelleTable = newJTable(); JScrollPane monScrollPane = newJScrollPane(nouvelleTable); Table monModel = newTable(donnees); nouvelleTable.setModel(monModel); Object[]
oj2 = {"1","2","3","4","5","6","7"}; monModel.addRow(oj2); monScrollPane.setBounds(0,0,500,400); jPanel7.add(monScrollPane);
Voilà!
Vu que je n'ai pas trop commenté, j'espère que tu comprendras
le code.
|
|
dimanche 11 juin 2006 à 18:26:50 |
Re : Editer des données affiché sur un JTable

alia_2006
|
Salut, Le problème est résolu. Merci beaucoup pour votre aide.
|
|
Cette discussion est classée dans : données, jtable, affiché, editer
Répondre à ce message
Sujets en rapport avec ce message
JTable [ par omzo25 ]
je voudré de l'aide concernant les JTable, je sui entrin de faire une apllication en java sur la gestiondes étudiants, et mon probléme est que j voudr
JTable [ par kawtar_ch ]
Salut!!comment faire pour qu'un JTable m'affiche les données a partir de la base de données et comment pourrais modifier, supprimer et ajouter dans la
Editeur une cellule de JTable [ par stevenleferran ]
Bonjour,voilà, j'ai une JTable basé sur un modèle de données AbstractTableModel...Je n'ai pas de problème pour charger les données et pour les mettre
Constructeur JTable [ par Bumcello ]
Bonjour,J'utilise un objet graphique swing JTable, et donc j'ai choisi le constructeur qui prend 2 paramètres. Ces 2 paramètres sont 2 vecteurs. Le pr
retour à la ligne dans une cellule de JTable [ par RugbyOne ]
Bonjour à tous, J'ai une JTable pour gérer mon affichage. Le problème c'est que les données (chaînes de caractères) dans chaque cellule de la J
EDITER CELLULE JTABLE [ par kyript ]
Salut à tousj'essaye de rendre les cellule d'un JTable éditable afin de mettre à jour une base de donnée.Mais je comprend pas le systeme de fonctionn
Récupérer données d'une bdd pour les mettre dans une JTable [ par greglover ]
Bonsoir, je peine moi aussi avec les JTable à afficher des données. Je souhaite les extraire d'une base de donnée d'élèves avec 5 champs. Je n'arrive
base de données + jtable + java [ par elhaouatekarim ]
je veux recuperer le resultat d'une requette et l'afficher avec jtable si vous avez des propositions de code veuillez m'entenir en courant merci
recuperer les données d'une Jtable dans un tableau de double [ par p3ace59 ]
salut je debute en prog, dans ma JFrame j'ai une JTable qui ne contient que des doubles et je voudrai récupéré justement ces données dans un tableau d
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOURTECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOUR par ROMELARD Fabrice
Après un retour sur l'histoire des TechDays de Paris et le fait que ce soit le plus gros event MS au monde (du fait de sa gratuité), le président de MS France (Eric Boustoullier) a fait une présentation de la vision Microsoft pour les années à venir...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|