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 :

Image dans JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 182
    Par défaut Image dans JTable
    Bonjour a tous,
    comment je peux ajouter une image a une colonne dans un jtable.
    quelqu'un peut m'expliquer.
    merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 106
    Par défaut
    En utilisant un JTable Cell Renderer:

    http://download.oracle.com/javase/tu...nts/table.html

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 182
    Par défaut
    bonsoir,
    j'ai utilisé le jTable et cell renderer mais mon probléme que le même image s'affiche a chaque ligne alors que je veux faire un if pour tester si connecte une image si nn connecté une aure image
    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
     
    class ImageRenderer extends DefaultTableCellRenderer {
      JLabel lbl = new JLabel();
     
      ImageIcon icon = new ImageIcon(getClass().getResource("images.jpg"));
     
      public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
          boolean hasFocus, int row, int column) {
        lbl.setText((String) value);
        lbl.setIcon(icon);
        return lbl;
      }
     Object [] scan=new Object[3];
     
     TableModel modele=jTable1.getModel();
     
    //pingResult :resultat de ping
     
     if(pingResult.contains("Impossible de joindre l'h�te de destination"))
                 {
                            System.out.println("ne ping pas");
                scan[0]=ip;
                scan[1]=false;
     
                ((DefaultTableModel)modele).addRow(scan);
                jTable1.getColumnModel().getColumn(2).setCellRenderer(new ImageRenderer());
     
                   jTable1.setModel(modele);
     
                    jTable1.repaint(0);
     
                 }
     
                 else
    {
                            System.out.println("ping correctement");
     
                scan[0]=ip;
                scan[1]=true;
                ((DefaultTableModel)modele).addRow(scan);
     
                   jTable1.setModel(modele);
                    jTable1.repaint(0);
     
    } }
    merci à l'avance

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 106
    Par défaut
    Dans la methode 'getTableCellRendererComponent', tu dois tester ton parametre "value", qui doit etre de type Object[] (tu l'a ajouté avec addRow dans le TableModel) et donc tu pourras mettre une icone differente suivant le resultat

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 182
    Par défaut
    Bonjour ,
    si j'applique ce 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
    class ImageRenderer extends DefaultTableCellRenderer {
     public static final String CONNECTED_PICTURE = "images.jpg";
      public static final String DISCONNECTED_PICTURE = "planète.jpg";
     
      protected JLabel description;
      protected ImageIcon iconConnected;
      protected ImageIcon iconDisconnected;
     
      protected JLabel getDescription() {
        if (description == null) {
          description = new JLabel();
        }
        return description;
      }
     
      protected ImageIcon getIconConnected() {
        if (iconConnected == null) {
          iconConnected = new ImageIcon(getClass().getResource(CONNECTED_PICTURE));
        }
        return iconConnected;
      }
     
      protected ImageIcon getIconDisconnected() {
        if (iconDisconnected == null) {
          iconDisconnected = new ImageIcon(getClass().getResource(DISCONNECTED_PICTURE));
        }
        return iconDisconnected;
      }
     
      public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        String description = (String) value;
        getDescription().setText(description);
        if ("connected".equals(description)) {
          getDescription().setIcon(getIconConnected());
        } else if ("disconnected".equals(description)) {
          getDescription().setIcon(getIconDisconnected());
        }
        return getDescription();
      }
    }
    alors comment je modifie la classe principale

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ImageRenderer v= new ImageRenderer();
    scan[2]=v.getIconConnected();
    mais il ne m'affiche pas l'image seulement le chemin de l'image,comment je peux corriger le problème

    merci

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 106
    Par défaut
    Pour un element de reponse, voici ton cellrenderer:

    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
     
    public class ImageRenderer extends DefaultTableCellRenderer
        {
            public static final String CONNECTED_PICTURE = "images.jpg";
            public static final String DISCONNECTED_PICTURE = "planète.jpg";
     
            protected JLabel labelDescription = new JLabel();
            protected ImageIcon iconConnected = new ImageIcon(getClass().getResource(
                    CONNECTED_PICTURE));
            protected ImageIcon iconDisconnected = new ImageIcon(getClass().getResource(
                    DISCONNECTED_PICTURE));
     
            public Component getTableCellRendererComponent(JTable table,
                    Object value, boolean isSelected, boolean hasFocus, int row,
                    int column)
            {
                System.out.println(value);
                String description = (String) value;
                labelDescription.setText(description);
                if ("connected".equals(description))
                {
                    labelDescription.setIcon(iconConnected);
                }
                else if ("disconnected".equals(description))
                {
                    labelDescription.setIcon(iconDisconnected);
                }
                return labelDescription;
            }
        }
    Pour gérer encore mieux tes informations, je te propose de créer un tableModel qui gérera tes tableaux:

    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
     
    public class PersoTableModel extends AbstractTableModel
        {
            Vector<Object[]> v = new Vector<Object[]>();
     
     
            public int getColumnCount()
            {
                return 3;
            }
     
            public int getRowCount()
            {
                return v.size();
            }
     
            public Object getValueAt(int rowIndex, int columnIndex)
            {
                Object[] o = (v.get(rowIndex));
                return o[columnIndex];
            }
     
            public void addScan(Object[] o)
            {
                v.add(o);
            }
     
        }
    Ensuite, pour tester tout ca, une petite JFrame:

    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
     
    public class Test extends JFrame
    {
        public Test()
        {
            setSize(new Dimension(300, 300));
     
            Object[] scan = new Object[3];
     
            JTable table = new JTable();
            PersoTableModel model = new PersoTableModel();
     
            table.setModel(model);
            table.getColumnModel().getColumn(2).setCellRenderer(
                    new ImageRenderer());
     
            String s = "ok";
     
            // pingResult :resultat de ping
            if (s.contains("Impossible de joindre l'h�te de destination"))
            {
                System.out.println("ne ping pas");
                scan[0] = "ip";
                scan[1] = false;
                scan[2] = "disconnected";
     
                model.addScan(scan);
            }
            else
            {
                System.out.println("ping correctement");
     
                scan[0] = "ip";
                scan[1] = true;
                scan[2] = "connected";
     
                model.addScan(scan);
            }
     
            setLayout(new BorderLayout());
            add(table);
        }
     
        public static void main(String[] args)
        {
            new Test().setVisible(true);
        }
    }
    Si tu as des questions, n'hesite pas

Discussions similaires

  1. Problème image dans JTable
    Par Polux000 dans le forum Composants
    Réponses: 1
    Dernier message: 03/12/2008, 12h03
  2. image dans JTable
    Par ahmed.j2ee dans le forum Composants
    Réponses: 3
    Dernier message: 02/09/2008, 14h17
  3. Insertion d'un image dans un compsant Jtable
    Par kodo dans le forum Composants
    Réponses: 1
    Dernier message: 10/04/2006, 14h26
  4. [JTable] Insertion d'images dans la première colonne
    Par cocolepelo dans le forum Composants
    Réponses: 2
    Dernier message: 29/11/2005, 15h17
  5. Insertion des boutons et des images dans une JTable
    Par anouar dans le forum Composants
    Réponses: 2
    Dernier message: 17/11/2005, 20h23

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