Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3070 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] JTable

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA] JTable

n°133092
Pschitt
Posté le 01-05-2002 à 17:31:20  profilanswer
 

Comment éviter que le remplissage d'une JTAble renvoye une exception lorsqu'il rencontre une valeur nulle pour une cellule ?

mood
Publicité
Posté le 01-05-2002 à 17:31:20  profilanswer
 

n°133103
darklord
You're welcome
Posté le 01-05-2002 à 18:17:53  profilanswer
 

try {
}
catch (NullpointerException npe) {
}


---------------
Just because you feel good does not make you right
n°133127
Pschitt
Posté le 01-05-2002 à 19:10:23  profilanswer
 

Que tu places ou ?
Dans getValueAt(int row, int col)  
ou dans setValueAt(Object value, int row, int col)
 
Pour initialiser la table, le système utilise vraiment ces méthodes ou celles ci ne sont utilisées que pour la màj éventuelle des données ?

n°133158
gfive
Posté le 01-05-2002 à 21:28:23  profilanswer
 

Ca dépend à quel moment tu dois envoyer l'exception :  
 
getValueAt (...) est utilisé par ja JTable pour récupérer la donnée du modèle au moment de l'affichage...
setValueAt() est ce que tu dois utilser pour mettre à jour une valeur du modèle...
 
Donc, à mon avis, c'est plutôt dans setValueAt()

n°133173
Pschitt
Posté le 01-05-2002 à 22:19:31  profilanswer
 

C'est au moment de l'affichage que j'ai des éléments nuls du modèle à afficher.
Dois je les transformer en chaînes vides pour que la JTable m'affiche une cellule vide ?
 
Les cellules ne seront pas éditables, je ne devrais donc pas avoir besoin de setValueAt(...)

n°133207
gfive
Posté le 01-05-2002 à 23:56:59  profilanswer
 

Ah, okaye, ouai, alors, c'est bien dans le getValueAtr qu'il faut le mettre, je croyais que tu voulais une exception lors du remplissage du modèle.

n°133791
Pschitt
Posté le 02-05-2002 à 22:49:16  profilanswer
 

Bon maintenant j'ai une merde avec mon modèle.
Y'a t-il des limites à redéfinir les méthodes getRowCount(), getValueAt(), ... car en implèmentant un vector pour alimenter la JTable, celle-ci me renvoye un NullPointerException en tentant d'accéder à la méthode getRowCount() ?
N'y comprends + rien :
 
Je suis persuadé que l'erreur est vraiment conne mais ça fait un moment que je bataille.  
Voici le code en question :  
 
Classe définissant le modèle de la JTable :  
 
package societe.traitement;
 
import javax.swing.table.AbstractTableModel;
import java.util.Enumeration;
import java.util.Vector;
import societe.stockage.ListeV;
import societe.stockage.ListeVStockable;
import societe.donnees.employe.*;
 
class EmpTableModel extends AbstractTableModel {
     
 static final String[] COL_NAMES = {"Agence",
          "Nom",
          "Prénom",
          "Adresse",
          "Tél.",
          "N° Sécu.",
          "Date embauche",
          "Matricule"};
 private Vector rows = null;
         
 public EmpTableModel(ListeVStockable empData) {
   
  Vector rows = new Vector();
   
  /*for(Enumeration e = empData.getEnum(); e.hasMoreElements(); ) {
   this.rows.add(e.nextElement());      
  }*/
  rows.add( empData.elementNum(0) );
  rows.add( empData.elementNum(1) );
  rows.add( empData.elementNum(2) );
 }  
     
    public int getColumnCount() {
        return COL_NAMES.length;
        }
 
    public int getRowCount() {
       System.out.println("Nbre éléments dans le vector : "+rows.size());  
     return rows.size();  
    }
 
    public String getColumnName(int col) {
        return COL_NAMES[col];
    }
 
    public Object getValueAt(int row, int column) {
    Vector tmprow = new Vector();
    tmprow = (Vector)rows.elementAt(row);
    return tmprow.elementAt(column);
   }
 
    public Class getColumnClass(int c) {
            return getValueAt(0, c).getClass();
    }    
 
    public boolean isCellEditable(int row, int col) {
      return false;
    }      
}
 
Je suis obligé de remplir le vector à la mano sinon il plante dés l'instanciation de EmpTableModèle ?  
J'ai testé le passage des données au constructeur -> pas de pbs  
Ca semble venir du vector mais je vois pas  
 
Voici la mèthode qui créer la JTable :
 
package societe.traitement;
 
import java.awt.*;
import java.io.*;
import java.util.*;
import javax.swing.JTable;
import javax.swing.JScrollPane;
 
import societe.donnees.employe.*;
import societe.stockage.*;
import societe.traitement.EmpTableModel;
import societe.ihm.MainFrame;
import societe.ihm.AboutDialog;
 
    ...
 
 public void actionAfficherEmploye() {
   
     EmpTableModel myModel = new EmpTableModel(cListe);
     JTable tableEmp = new JTable(myModel);
  tableEmp.setPreferredScrollableViewportSize(new Dimension(500, 70));
  JScrollPane scrollPane = new JScrollPane(tableEmp);              
 
     mainFrame.add(scrollPane, BorderLayout.CENTER);
     
 mainFrame.pack();
 }
   ...

n°133807
gfive
Posté le 02-05-2002 à 23:40:05  profilanswer
 

Facile :
 
ton code :  
 
 private Vector rows = null;
       
public EmpTableModel(ListeVStockable empData) {
 
 Vector rows = new Vector();
 
 /*for(Enumeration e = empData.getEnum(); e.hasMoreElements(); ) {
  this.rows.add(e.nextElement());      
 }*/
 rows.add( empData.elementNum(0) );
 rows.add( empData.elementNum(1) );
 rows.add( empData.elementNum(2) );
}  
 
dans le constructeur, tu écris "Vector rows = new Vector()"
 
mais dans la déclaration d'attributs, tu a déjà déclaré ce vecteur....Donc, bête question de visibilité : tu instancie un vecteur qui n'est pas l'attribut de ta classe, mais un vecteur qui n'est visible que dans le constructeur....
 
Remplace ton constructeur par  :
 
 public EmpTableModel(ListeVStockable empData) {
 
 rows = new Vector();
 
 /*for(Enumeration e = empData.getEnum(); e.hasMoreElements(); ) {
  this.rows.add(e.nextElement());      
 }*/
 rows.add( empData.elementNum(0) );
 rows.add( empData.elementNum(1) );
 rows.add( empData.elementNum(2) );
}  
 
 
Ca devrait beaucoup mieux marcher! (enfin, je me suis pas penché sur la suite, mais si tu as une NullPointerException, a mon avis, ça devrait aider!! :D
 
Et n'aie pas honte, je me suis fait avoir aussi au début (et même pas qu'au début!)

n°133813
Pschitt
Posté le 03-05-2002 à 00:02:04  profilanswer
 

C'est fou ce qu'on peut se faire chier copieusement pour anneries.
Mais à force de galères ça devrait aller mieux.
 
Merci de ton aide

n°133815
gfive
Posté le 03-05-2002 à 00:06:28  profilanswer
 

Ah tiens, c'est à peu près ce que je m'étais dit aussi!! :D

mood
Publicité
Posté le 03-05-2002 à 00:06:28  profilanswer
 

n°134128
Pschitt
Posté le 03-05-2002 à 15:32:18  profilanswer
 

Un pb de résolu et 10 de retouvé !
 
C'est maintenant le cast de la méthode :
    getValueAt(int row, int column) {  
         ...
         tmprow = (Vector)rows.elementAt(row);
         ...
    }
A la compile ça baigne mais à l'éxécution il m'envoye une erreur de cast :  
Exception occurred during event dispatching:
java.lang.ClassCastException: societe.donnees.employe.Employe
...
 
Pour m'en sortir je suis obligé de caster manuellement à la bourin chaque attribut de mon objet :
 
    public Object getValueAt(int row, int column) {
     Object obj = null;
        switch(column) {
         case 0 : obj = ((Employe)rows.elementAt(row)).getAgenceEmp();break;
         case 1 : obj = ((Employe)rows.elementAt(row)).getNomEmp();break;
         case 2 : obj = ((Employe)rows.elementAt(row)).getPrenonEmp();break;
         case 3 : obj = ((Employe)rows.elementAt(row)).getAdrEmp();break;
         case 4 : obj = ((Employe)rows.elementAt(row)).getTelEmp();break;
         case 5 : obj = ((Employe)rows.elementAt(row)).getNSecuEmp();break;
         case 6 : obj = ((Employe)rows.elementAt(row)).getDateEmbEmp();break;
         case 7 : obj = new Integer( ((Employe)rows.elementAt(row)).getMatEmp() );
        }  
     return obj;
   }      
 
Pas trés pratique !?

n°134239
gfive
Posté le 03-05-2002 à 17:27:51  profilanswer
 

Ah ouais, mais là, c'est ta structure de données qui est bof....
 
Tu devrais avoir une méthode :Object getTableField(int column) dans Employe, qui te renvoie ce qu'iol faut, mais bon, ça ne fait que déplacer ton switch...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] JTable

 

Sujets relatifs
[java] comment obtenir le propriétaire d'un fichier sous nt4[JAVA] Affichage texte
[Java] Animation de glissement ->Gfive au secours !!! :-)[Java] Swing -> Panel relatif [Resolved Thanks mr_mat]
Question java[JAVA] comment inserer des JCheckBox dans une JTable
[JAVA] Insérer le résultat d'une requete sql (ResultSet) dans 1 JTABLE[Java] JTable et TableColumn
[JAVA] JTable et KeyEvent...[JAVA] Probleme avec les JTable...
Plus de sujets relatifs à : [JAVA] JTable


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR