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 :

listener et jTable


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 78
    Par défaut listener et jTable
    bonjour,
    j'ai un listener sur un jTree qui affiche une jTable, par ailleurs, j'ai un listener sur un jComboBox qui affiche une autre jTable.
    en premier, une jTable est affichée par le listener du jComboBox, ensuite quand je clique sur les noeuds du jTree la deuxième jTable s'affiche mais à un certain moment en cliquant sur d'autre noeuds dans le jTree (sans que je clique sur les items du combobox) il y a le message d'erreur suivant qui s'affiche:
    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
     
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
     
    at outildediagnostic.expertise$14.getColumnClass(expertise.java:992)
    at javax.swing.JTable.getColumnClass(JTable.java:1833)
    at javax.swing.JTable.getCellRenderer(JTable.java:3878)
    at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:1984)
    at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1887)
    at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1810)
    at javax.swing.plaf.ComponentUI.update(ComponentUI.java:142)
    at javax.swing.JComponent.paintComponent(JComponent.java:742)
    at javax.swing.JComponent.paint(JComponent.java:1005)
    at javax.swing.JComponent.paintChildren(JComponent.java:842)
    at javax.swing.JComponent.paint(JComponent.java:1014)
    at javax.swing.JViewport.paint(JViewport.java:728)
    at javax.swing.JComponent.paintChildren(JComponent.java:842)
    at javax.swing.JComponent.paint(JComponent.java:1014)
    at javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4963)
    at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4916)
    at javax.swing.JComponent._paintImmediately(JComponent.java:4859)
    at javax.swing.JComponent.paintImmediately(JComponent.java:4666)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:451)
    at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:114)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
    sachant que l'erreur suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    at outildediagnostic.expertise$14.getColumnClass(expertise.java:992)
    pointe sur la ligne suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     public Class getColumnClass(int c) {return getValueAt(0, c).getClass();}
    du code suivant (le TableModel est celui de la jTable affichée par le listener du jTree):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      TableModel dataModel3 = new AbstractTableModel(){
      public int getColumnCount() { return tab.length; }
      public int getRowCount() { return donnée.length;}
      public Object getValueAt(int row, int col) {return donnée[row][col];}
      public String getColumnName(int column) {return tab[column];}
      public Class getColumnClass(int c) {return getValueAt(0, c).getClass();}
      public boolean isCellEditable(int row, int col) {return col != 5;}
      public void setValueAt(Object aValue, int row, int column) { donnée[row] [column] = aValue; }
      };
    j'aimerais bien savoir d'où provient le problème.
    merci.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    Manifestement getValueAt(0, c) renvoie null dans certains cas

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 78
    Par défaut
    qu'est ce qu'il faut faire dans ce cas?

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    getColumnClass(int c) dépend uniquement de la colonne, pas de la valeur qui est dans la case. Tu peux construire un tableau de classes (CLass[] ...) et l'utiliser pour ça (comme pour les noms de colonnes)

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 78
    Par défaut
    je vois pas trop ce que tu veux dire, je vois pas comment je peux utiliser un tableau de classes pour construire une table.
    pourrais tu m'expliquer plus clairement?
    merci.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Class[] types = new Class[3];
    types[0] = Double.class;
    types[1] = String.class;
    types[2] = Date.class;

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 78
    Par défaut
    Désolé, mais je vois pas comment intégrer ça dans le TableModel. je vois pas la relation .
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {return getValueAt(0, c).getClass();}
    il faut mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Class[] types = new Class[3];
    types[0] = Double.class;
    types[1] = String.class;
    types[2] = Date.class;
    ??
    c'est le principe que j'arrive pas à saisir.

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    Tu fais comme pour la méthode getColumnName, sauf qu'au lieu de pointer sur "tab" qui est un tableau de String, tu pointes sur "types" qui est un tableau de Class. Tu initialises "types" au même endroit que tab.

    Ce que je t'ai donné c'est un exemple avec 3 colonnes (une de doubles, une de String et une de Date)

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 78
    Par défaut
    merci, ça marche , seulement il reste un petit problème: dans la table j'ai une colonne qui prend des String comme type et une autre qui contient des images. j'ai du faire cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Class[] types = new Class[2];
    types[1] = String.class;
    types[2] = Object.class;
    à l'affichage, à la place des images c'est le chemin d'accès aux images qui est affiché.

    avant d'utiliser le tableau des classes, dans les cas où ça marchait les images s'affichaient normalement.
    merci encore.

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    Essaie types[2] = Icon.class;

  11. #11
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 78
    Par défaut
    Génial!! ça marche !!!
    Merci beaucoup .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Listener sur JTable
    Par calypso dans le forum Composants
    Réponses: 3
    Dernier message: 05/02/2009, 16h27
  2. Réponses: 7
    Dernier message: 23/03/2006, 13h13
  3. Soucis avec les JTables et les listener
    Par shingo dans le forum Composants
    Réponses: 2
    Dernier message: 22/02/2006, 11h51
  4. Quel listener pour l'édition d'une JTable?
    Par ®om dans le forum Composants
    Réponses: 4
    Dernier message: 11/05/2005, 21h13
  5. Selection listener dans JTable
    Par calypso dans le forum Composants
    Réponses: 3
    Dernier message: 02/08/2004, 17h56

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