begin process at 2010 02 09 21:00:51
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Divers

 > 

Débutant(e)

 > 

Editer des données affiché sur un JTable


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,250 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales