alia_2006
Messages postés4Date d'inscriptionmercredi 24 mai 2006StatutMembreDernière intervention11 juin 2006
-
26 mai 2006 à 19:16
alia_2006
Messages postés4Date d'inscriptionmercredi 24 mai 2006StatutMembreDernière intervention11 juin 2006
-
11 juin 2006 à 18:26
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.
cs_RedDog
Messages postés50Date d'inscriptionlundi 7 avril 2003StatutMembreDernière intervention21 août 2013 2 juin 2006 à 06:41
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 Table avec paramètres par
défaut. */
publicTable()
{
}
/** Crée une
Table avec données et paramètres par défaut.
*/
publicTable(Object[][]
donnees) {
this.donnees
= donnees;
}
/** Crée une
Table avec données, en redéfinissant pour chaque
* colonne, l'en-tête, le type de
Class
et le fait qu'elle
* soit ou non éditable.
*/
publicTable(Object[][]
donnees, String[] titres,
Class[]
types, boolean[] canEdit) {
this.types
= types;
this.canEdit
= canEdit;
this .donnees
= donnees;
this.titres
= titres;
}
/* Méthodes */
public int getRowCount()
{
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
Table */
publicvoidaddRow(Object[] object){
Object rows[][] = new Object[donnees.length+1][7];
scaryman
Messages postés492Date d'inscriptionvendredi 30 janvier 2004StatutMembreDernière intervention16 mai 200712 26 mai 2006 à 19:33
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.
alia_2006
Messages postés4Date d'inscriptionmercredi 24 mai 2006StatutMembreDernière intervention11 juin 2006 1 juin 2006 à 19:54
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[]) {
}
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?