IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

Problème avec JTable


Sujet :

Composants Java

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 145
    Points : 88
    Points
    88
    Par défaut Problème avec JTable
    Bonjour,

    J'ai un problème avec JTable, J'ai un JTable qui doit être vierge au début et qui se rempli une fois un bouton cliqué.
    J'ai un message lors de l'initialisation du JTable au lancement de l'appli, effectivement au lancement getColumnClass déclenche une erreur car il n'y a pas de valeur connu.

    Une fois le bouton cliqué , il me remplit bien le tableau
    Comment régler ce problème?
    Merci

    Message d'erreur :
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at essai_JTable.CopyOfCopyOfJTableDemo$MyTableModel.getColumnClass(CopyOfCopyOfJTableDemo.java:425)
    at javax.swing.JTable.getColumnClass(Unknown Source)
    at javax.swing.JTable.getCellRenderer(Unknown Source)
    at javax.swing.plaf.synth.SynthTableUI.paintCell(Unknown Source)
    at javax.swing.plaf.synth.SynthTableUI.paintCells(Unknown Source)
    at javax.swing.plaf.synth.SynthTableUI.paint(Unknown Source)
    at javax.swing.plaf.synth.SynthTableUI.update(Unknown Source)
    ...

    Mode code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    public class CopyOfCopyOfJTableDemo {
    private String[] columnNames = {"Nom du fichier", "Emplacement", "Taille", "Fichier identique", "Supprimer"};
     
        private Object [][] data = new Object[100][5];
        MyTableModel model;
        private JTable table;
     
        JFrame frame = new JFrame("FramePrincipale");
        Container content = frame.getContentPane();
     
        public CopyOfCopyOfJTableDemo() {
        	model = new MyTableModel();
            table = new JTable(model);
     
    ...
    }
    public class MyTableModel extends AbstractTableModel {
        	public int getColumnCount() {
                return columnNames.length;
            }
     
            public int getRowCount() {
                return data.length;
            }
     
            public String getColumnName(int col) {
                return columnNames[col];
            }
     
            public Object getValueAt(int row, int col) {
                return data[row][col];
            }
     
            /*
             * JTable utilise cette methode pour determiner le renderer/ par defaut
             * éditeur pour chaque cellule. Si nous ne avions pas mis en œuvre cette méthode, alors la dernière colonne serait contenir du texte ("true" / "false"),
             * plutôt que d'une case à cocher.
             */
            public Class getColumnClass(int c) {
                return getValueAt(0, c).getClass();
            }
            /*
             * Ne pas besoin de mettre en œuvre cette méthode, sauf si la table n'est pas ou partir pas éditable
             * 
             */
            public boolean isCellEditable(int row, int col) {
                //Note that the data/cell address is constant,
                //no matter where the cell appears onscreen.
                if (col < 2) {
                    return false;
                } else {
                    return true;
                }
            }
     
            /*
             * Ne pas besoin de mettre en œuvre cette méthode, sauf si les données de votre table peuvent changer.
             * 
             */
            public void setValueAt(Object value, int row, int col) {
                data[row][col] = value;
                fireTableCellUpdated(row, col);
            }
        }

    Bonne journée

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Les données de ton modèle sont stockées dans le tableau data, qui a une taille initiale de 100 x 5, qui lui est rempli de null : donc, si tu affiches la JTable avant d'y mettre les données utiles, on va afficher une JTable avec 500 cases vides. Si c'est bien le but pour afficher ces cases, la JTable essaye de déterminer quel renderer utiliser, en demande la classe de la valeur. Il faut que tu t'arrange pour que quand on demande la classe d'une cellule contenant null, on ne demande pas la classe de ce null, mais on renvoit une classe standard (String.class par exemple). Sinon, s'il faut afficher la JTable vide (sans lignes), il faut que getRowCount() retourne 0 tant que les données n'ont pas été mises dans le tableau (ou alors utiliser un modèle plus adapté, à partir de ArrayList par exemple pour les lignes).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 145
    Points : 88
    Points
    88
    Par défaut
    merci pour vos indications

    bonne journée

Discussions similaires

  1. Problème avec JTable
    Par reeda dans le forum Composants
    Réponses: 5
    Dernier message: 03/10/2008, 18h06
  2. Problème avec JTable
    Par syrius31 dans le forum Composants
    Réponses: 5
    Dernier message: 26/07/2007, 11h01
  3. Problème avec Jtable
    Par @yoyo dans le forum Composants
    Réponses: 4
    Dernier message: 22/03/2006, 15h51
  4. problème avec Jtable
    Par magic001 dans le forum Composants
    Réponses: 6
    Dernier message: 15/03/2006, 23h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo