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 :

Insertion imageIcon dans JTable


Sujet :

Composants Java

  1. #1
    Membre confirmé Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Par défaut Insertion imageIcon dans JTable
    Bonjour,

    J'ai un petit problème, j'essaye en vain d'insérer une image dans une cellule d'un JTable mais j'obtiens le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.ArrayStoreException: javax.swing.ImageIcon
    Je vous donne un bout de code, histoire de vous aiguiller un peu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
          ImageIcon imageDelM = new ImageIcon(gestionmessagequeue.GeneralMQ.class.
                                       getResource("im_delete.gif"));
          TableModelX model = new TableModelX(messages,entete);
          for (int i=0;i<nbM; i++)
            model.setValueAt(imageDelM,i,2);
     
          tabMsg = new JTableX(model);
          tabMsg.setTableEditable(false);
          tabMsg.getTableHeader().setReorderingAllowed(false);
    Merci pour vos lumières

  2. #2
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Je dis peut-être une connerie mais cela ne viendrait du fait que ton image n'hérite pas de Component ?

  3. #3
    Membre confirmé Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Par défaut
    Citation Envoyé par iohack
    Je dis peut-être une connerie mais cela ne viendrait du fait que ton image n'hérite pas de Component ?
    Heu là je ne vois pas le rapport...

  4. #4
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par iohack
    Je dis peut-être une connerie mais cela ne viendrait du fait que ton image n'hérite pas de Component ?
    Je crois que tu as raison... Une image n'est qu'un objet et pas un composant graphique, il faut que tu emploies un composant qui affiche l'image que tu veut...

    Par exemple, le JXImagePanel de SwingX ou tout autre composant qui affiche une image et que tu remplaces l'image dans ton modèle par le composant.

    Je suis pas tout à fait sûr, mais tu risques rien à essayer

  5. #5
    Membre confirmé Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Par défaut
    Heu.....
    J'ai du mal à vous suivre, mon imageIcon n'hérite pas de component bien sur mais JLabel hérite bien de component, et c'est dans un JLabel que je met mon image dans mon TableCellRenderer que voici:

    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
    class TableCellRendererX extends DefaultTableCellRenderer
        {
            public Object value;
            public Component getTableCellRendererComponent(
                    JTable table, Object value, boolean isSelected,
                    boolean hasFocus, int row, int col)
            {
                this.value=value;
                //this.repaint();
                //Couleur de fond et de police pour les lignes selectionnées
                Color BACKGROUND_SELECTED = Color.YELLOW;
                Color FOREGROUND_SELECTED = Color.BLUE;
                //Couleur de fond et de police pour les lignes non-selectionnées
                Color BACKGROUND = Color.WHITE;
                Color FOREGROUND = Color.BLACK;
                // on utilise le renderer super qui va tenir compte de
                // tout ce qu'on a besoin (sélection, focus...)
                JLabel comp = (JLabel) super.getTableCellRendererComponent(table, value,
                        isSelected, hasFocus, row, col);
                if (isSelected)
                {
                    this.setBackground(BACKGROUND_SELECTED);
                    this.setForeground(FOREGROUND_SELECTED);
                    this.setHorizontalAlignment(JLabel.CENTER);
                }
                else if (value instanceof ImageIcon) { 
                    System.out.println("toto");
                    ImageIcon imge = (ImageIcon)value; 
                    comp.setText(null);            
                    comp.setIcon(imge);
                }
                else
                {
                    comp.setBackground(m_cBgColor[row][col]);
                    this.setForeground(FOREGROUND);
                    this.setHorizontalAlignment(JLabel.CENTER);
                }
                return this;
            }
     
        }
    Mais l'erreur java.lang.ArrayStoreException: javax.swing.ImageIcon n'est pas liée à ça (je pense). Elle se déclenche bien avant de passer dans le tableCellRenderer...

  6. #6
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Et l'interpréteur ne te dis pas à quelle ligne est levée l'exception ?

  7. #7
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par krolineeee
    Mais l'erreur java.lang.ArrayStoreException: javax.swing.ImageIcon n'est pas liée à ça (je pense). Elle se déclenche bien avant de passer dans le tableCellRenderer...
    Tu peut nous montrer ton modèle ?

    ArrayStoreException ca veut dire que tu ne mets pas le bon type d'objet dans un tableau.

  8. #8
    Membre confirmé Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Par défaut
    Citation Envoyé par wichtounet
    Tu peut nous montrer ton modèle ?

    ArrayStoreException ca veut dire que tu ne mets pas le bon type d'objet dans un tableau.
    Voilà le model :
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    package jtablex;
     
    import javax.swing.table.*;
     
    public class TableModelX extends AbstractTableModel {
     
        protected Object[][] m_odatas;
        protected boolean[][] m_bCellEditable;
        protected String[] m_stitres;
        protected boolean IS_EDITABLE = false;
        protected int m_iNbCol;
        protected int m_iNbRow;
     
        public TableModelX(Object[][] datas, String[] titres) {
            this.m_odatas = datas;
            this.m_stitres = titres;
            initCellEditable();
        }
     
        protected void initCellEditable() {
            m_iNbCol = m_stitres.length;
            m_iNbRow = m_odatas.length;
            m_bCellEditable = new boolean[m_iNbRow][m_iNbCol];
            for (int r = 0; r < m_iNbRow; r++) {
                for (int c = 0; c < m_iNbCol; c++) {
                    m_bCellEditable[r][c] = true;
                }
            }
     
        }
     
        public Object[][] getDatas() {
            return m_odatas;
        }
     
        public String[] getEntetes() {
            return m_stitres;
        }
     
     
        public int getRowCount() {
            return m_odatas.length;
        }
     
        public int getColumnCount() {
            return m_stitres.length;
        }
     
        public Object getValueAt(int row, int col) {
            Object o = m_odatas[row][col];
            if (o != null)
                return o;
            else
                return "";
        }
     
        public void setValueAt(Object value, int row, int col) {
            System.out.println("class:"+value.getClass().getName()+"   value:"+value);
            m_odatas[row][col] = value;
        }
     
        public Class getColumnClass(int col) {
            return getValueAt(0, col).getClass();
        }
     
     
        public boolean isCellEditable(int row, int col) {
            return m_bCellEditable[row][col];
        }
     
     
        public void setCellEditable(boolean editable, int row, int col) {
            m_bCellEditable[row][col] = editable;
        }
     
        public void setCellEditable(int row, int col, boolean editable) {
            m_bCellEditable[row][col] = editable;
        }
     
       public void setRowEditable(int row, boolean editable) {
            for (int c = 0; c < m_iNbCol; c++)
                m_bCellEditable[row][c] = editable;
        }
     
        public void setColumnEditable(int col, boolean editable) {
            for (int r = 0; r < m_iNbRow; r++)
                m_bCellEditable[r][col] = editable;
        }
        public void setTableEditable(boolean editable) {
           for (int r = 0; r < m_iNbRow; r++)
               for (int c = 0; c < m_iNbCol; c++)
                   m_bCellEditable[r][c] = editable;
       }
     
     
       public String getColumnName(int col) {
            return m_stitres[col];
        }
    }

  9. #9
    Membre confirmé Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Par défaut
    Citation Envoyé par iohack
    Et l'interpréteur ne te dis pas à quelle ligne est levée l'exception ?
    L'exception est levée à la méthode setValueAt(Object value, int row, int col)

    Seulement j'y arrive dans un projet, et dans l'autre ca pète....

  10. #10
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Quel est le type exact du tableau m_odatas ??? Comment tu l'initialises ?

    a++

  11. #11
    Membre confirmé Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Par défaut
    Citation Envoyé par adiGuba
    Salut,


    Quel est le type exact du tableau m_odatas ??? Comment tu l'initialises ?

    a++
    C'est un Object[][] qui est initialisé dans le constructeur

    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
    public class TableModelX extends AbstractTableModel {
    //type de m_odatas
        protected Object[][] m_odatas;
        protected boolean[][] m_bCellEditable;
        protected String[] m_stitres;
        protected boolean IS_EDITABLE = false;
        protected int m_iNbCol;
        protected int m_iNbRow;
     
        public TableModelX(Object[][] datas, String[] titres) {
    //intialisation de m_odatas
            this.m_odatas = datas;
            this.m_stitres = titres;
            initCellEditable();
        }

  12. #12
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par krolineeee
    C'est un Object[][] qui est initialisé dans le constructeur
    Non : Object[][] c'est le type avec lequel il est déclaré, mais cela n'est pas forcément son type réel.

    Enfin si tu préfères je voudrais savoir comment tu initialises le paramètres datas de ton constructeur...

    a++

  13. #13
    Membre confirmé Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Par défaut
    ah oki, désolée je ne te suivais pas là.

    Alors voilà une maniere qui fonctionne :
    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
    ImageIcon img = new ImageIcon(JTableX.class.getResource("excel.gif"));
        protected Object [][] m_odata = { {"lundi","beau temps",new Double(12.258),new Boolean(true),null},
                                {"mardi","beau temps",new Integer(30),new Boolean(false),null},
                                {"mercredi","beau temps",new Integer(16),new Boolean(true),null},
                                {"jeudi","beau temps",new Integer(18),new Boolean(false),null},
                                {"vendredi","beau temps",new Integer(2),new Boolean(true),null},
                                {"samedi","beau temps",new Integer(10),new Boolean(false),null},
                                {"dimanche","beau temps",new Integer(10),new Boolean(true),null}
        };
        protected String [] m_sentete = {"jour","météo","température","Libre?","image"};
     
     private JTableX jTableX = new JTableX(m_odata,m_sentete);
     
    for(int l=0; l<7; l++)
                jTableX.setValueAt(img,l,4);
    Dans ce cas, ca fonctionne.
    et Dans le cas où ca plante je fais :

    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
    try {
          Vector <String[]> vMsg = new Vector();
          Connection conn = scherzo.getJdbcConnection();
          String query = "select MT_CODE as CODE, MT_LIB as LIB from messagetype";
          Statement stmt = conn.createStatement();
          ResultSet rslt = stmt.executeQuery(query);
          if(rslt.next()) {
            do{
              String [] ligne = {rslt.getString("CODE"),rslt.getString("LIB")};
              vMsg.add(ligne);
            }while(rslt.next());
          }
          int nbM = vMsg.size();
          String [] entete = {"Code","Libellé","Suppression"};
          Object [][] messages = new String[nbM][3];
          for( int l=0; l<nbM; l++){
            String [] ligne = vMsg.get(l);
            messages[l][0] = ligne[0];
            messages[l][1] = ligne[1];
            messages[l][2] = null;
          }
          /*
          TableModelX model = new TableModelX(messages,entete);
          tabMsg = new JTableX(model);*/
          tabMsg = new JTableX(messages,entete);
          for (int i=0;i<nbM; i++)
              tabMsg.setValueAt(imageDelM, i, 2);

  14. #14
    Membre confirmé Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Par défaut
    OK merci pour ton aide, tu m'as guider vers mon erreur :
    Object [][] messages = new String[nbM][3];

    Les copier/coller ne sont pas toujours efficaces!
    Je suis impardonnable.

    Merci pour ton aide en tout cas!

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

Discussions similaires

  1. Insertion d'une JTable dans une JTable
    Par Dark_TeToN dans le forum Composants
    Réponses: 16
    Dernier message: 14/10/2010, 17h18
  2. [debutant] ajouter ImageIcon dans un Jbutton
    Par agugu dans le forum Composants
    Réponses: 4
    Dernier message: 25/04/2004, 23h40
  3. Insertion enregistrement dans table
    Par naidinp dans le forum ASP
    Réponses: 13
    Dernier message: 11/09/2003, 10h56
  4. [web] insertion javascript dans du perl
    Par laluna dans le forum Web
    Réponses: 3
    Dernier message: 28/07/2003, 10h50
  5. [TP]Insertion texte dans un autre programme
    Par FLB dans le forum Turbo Pascal
    Réponses: 53
    Dernier message: 14/06/2003, 21h11

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